簡體   English   中英

Android:如何合成鋼琴聲音?

[英]Android: How to synthesize piano sounds?

我嘗試使用SoundPool中的演奏速度來合成鋼琴聲音。 我聽到聲音了,但是聽起來...太丑了。 聽起來接近正確的聲音頻率,但不完全正確。 有時聽起來比我需要的要高(僅一點),有時聽起來要低一些-但聽起來很奇怪:)

float shift;
for ( int i = 0; i < 13; i++ ) {
    shift = ( float ) i / 12f;
    soundPool.play( soundID, 1, 1, 1, 0, ( float ) 1f + shift );
    try {
        Thread.sleep( 1500 );
    } catch (InterruptedException e) {
        e.printStackTrace();
    }   
}

其中:soundID-是已加載的鋼琴C4音符。

也許有人可以告訴我如何在Android中合成鋼琴聲音?

您的主要問題是使用錯誤的數學方法更改音高,而不是:

shift = ( float ) i / 12f;

您應該使用:

shift = pow( pow(2.0, 1/12.0), (float) i )

或類似的東西。

您的另一個問題是實時轉換的質量通常很差,我建議對12個按鍵音進行預縮放,然后將音調更改為2x,3x等,這可以通過簡單地刪除第n個樣本來完成。 此外,如果我是您,則需要對整個鍵盤進行預采樣(由於屏幕空間有限等原因,您的應用程序幾乎不需要20-25個按鍵),並將所有這些聲音加載到SoundPool並可以在任何時候。

我在這里找到了有用的鏈接。 但是,這是與lenik已經發布的公式相同的建議,除了它具有額外的信息。 太。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM