2012-05-07 36 views
5

我試圖做一個簡單的「虛擬劃手」,但我不知道它背後的理論。因爲我在谷歌上找不到任何有用的東西,所以我在這裏問:如何模擬音頻處理中的乙烯基劃痕效果?

  • 當我從頭開始(向前移動軌道)時發生了什麼?我是否會提高樣本的比例和/或比率?
  • 如何用音頻處理算法來模擬這種現象?

示例代碼/教程將reeeally讚賞:-)

+0

問:你現在如何編輯音軌?你使用什麼軟件?根據需要,我會混合一些「劃痕」,「嘶嘶聲」或「流行」效果。例如:http://free-loops.com/5174-short-record-scratch.html – paulsm4

+0

我正在使用Java,因爲我正在開發它作爲Android應用程序。 我仍然不知道是否應該使用默認的Java音頻處理或OpenSL。這取決於如果模仿「scratch」意味着改變音調/比率或Java沒有的其他功能。 編輯:我的應用程序將讓用戶像真正的乙烯基一樣控制曲目。讓他在播放時向前/向後移動它並獲得「scratch」效果 – user1118094

+0

您可能會發現有點困難,因爲Android不會讓您直接訪問音頻樣本(聲明:我不是Android開發人員,這正是我所聽到的,我可能錯了)。也就是說,你正在尋找的具體效果被稱爲「Varispeed」,它應該給你足夠的信息來開始研究。您可能還想添加一些額外的噪音以完成效果。 – admsyn

回答

5

當我劃傷(向前移動軌道)會發生什麼?我是否會提高樣本的間距和/或比率?

想想實際上發生了什麼:記錄包含音頻數據。記錄針從記錄中讀取音頻數據。隨着唱片旋轉,播放位置改變。 (這與觀看播放頭在數字音頻編輯器中通過音頻文件移動非常相似。)

當您以更快的速度旋轉記錄時,您正在提高播放速度。音頻既快又高。將播放速度提高兩倍,音頻將播放一個八度音階。

當您物理地旋轉記錄速度較慢時,您正在降低播放速度。音頻速度較慢,音調較低。將播放速率降低兩倍,音頻將播放一個八度音程。

記錄只能通過加快或減慢物理記錄來修改音頻播放,這會同時影響音高和播放速率。一些音頻軟件可以獨立改變音調和速率。記錄玩家不能。

(獲取電唱機和實驗聽到這聽起來像。)

我怎麼能效仿這一現象與音頻​​處理算法?

要模擬DJ抓記錄,您需要能夠調整音頻的回放速度,因爲用戶正在「刮擦」。

當用戶加快記錄速度時,加快播放速度。當用戶放慢錄製速度時,請放慢播放速度。

當用戶停止記錄時,完全停止播放。

當用戶反向旋轉記錄時,反轉播放。

您不需要改變音頻的音高。改變播放速度會自動完成。音高的任何進一步調整都會聽起來不正確。

我對圖書館沒有任何建議,但是如果你花時間的話,這樣的事情並不是很難實現。

1

當你從頭開始,你只是移動記錄下針來回。所以它相當於在音頻文件的相同部分上反覆循環前進和後退。我猜測速度在正弦波和三角波之間。您需要對樣本進行線性插值。

對於移動應用程序,我首先將屏幕的一個軸映射到音頻文件中的時間範圍。保留一個包含最後MotionEvent的緩衝區。當下一個MotionEvent到達時,根據(X,Y)座標計算映射的開始和結束位置。然後,計算兩個MotionEvents之間的流逝時間。這爲您提供了足夠的信息,以正確的位置和速度從文件播放,並隨着每個動作事件而不斷更新。

您可能需要對數據進行某種平滑處理,但這是一個起點。

1

可變速率重採樣器可能是合適的。這將加快播放速度並以相同的比例增加音高。

您可以追蹤「劃痕」運動的角速度與盤片旋轉的正常速率之間的比率,並將其用作本地重採樣比率。

比線性插值(比如使用可變寬度的Sinc插值內核)有更好的(更高的音頻質量)DSP速率重採樣方法。