2010-12-03 110 views
4

我已經在android上做了一些簡單的應用程序,並認爲是時候更復雜一些了。所以,我認爲我會嘗試一些已經存在的東西,但是從頭開始構建它。

這個想法是創建一個應用程序,允許用戶通過按下顯示屏上的虛擬鍵來彈奏鋼琴。但我不知道如何去綜合每個音符的聲音,最好是將每個音符的副本存儲在文件中,還是有一種動態合成音符和和絃的動態方式。

我已經與C++合作,所以NDK的東西也沒關係。 感謝您的幫助。如何在android/java中合成鋼琴聲音

+0

問題標題與問題真的很少有關。你真的在問如何在java中合成聲音。另外,你幾乎肯定不會想用ndk – Falmarri 2010-12-03 17:16:26

+0

來做這件事,我在看https://ccrma.stanford.edu/software/stk/。我認爲把我需要的零件放入NDK,然後從那裏出發。或類似的東西。 – 2010-12-03 18:08:26

回答

2

聲音播放(越區切換緩衝器)幾乎必須被從Android的Java API

合成可以在本機或Java來完成,取它優選完成。

短的(未壓縮的)樣本可以重複播放,但您可能也想要一個攻擊瞬變。也許你可以有一個攻擊,一個延續和釋放,只要關鍵失效就重複延續。理想情況下,每個樣本應該是其基本組成部分的整數個週期,以便在維持或持續衰減的攻擊之間切換時不會出現瞬態。

我確定你可以在FM或其他合成器的某個地方找到代碼......這個你可能想要在一個本地庫中實現,它將緩衝區轉交給java代碼傳遞給音頻apis。

真是太糟糕了,android已經有了一個內置midi合成器,但是顯然沒有動態的接口,所以它只能播放midi文件。

1

到目前爲止,最簡單的解決方案是將每個音符的聲音錄製在鋼琴上,並在按下鍵時播放它。許多專業的虛擬鋼琴樂器以這種方式工作,記錄鋼琴上以多種速度播放的每個音符。顯然,這可能需要很多千兆字節的磁盤空間,但對於手機應用程序,您可能會以一個八度音程記錄每個音符的單個MP3音樂。

實際上算法綜合鋼琴的聲音是很難做到的,直到最近,很少有人做得令人信服(pianoteq是當前最好的實現之一)。