簡體   English   中英

將變量與音頻文件同步

[英]Sync variable with audio file

我有一個音頻文件,並且希望將float變量與之同步。 然后,將使用float變量創建正在播放的音頻文件的圖形指示。

我想發生的事情:

音頻文件中的其他每個節拍(第一個節拍,第三個節拍,第五個節拍等),變量應為0.0f。 其他節拍(第二拍,第四拍,第六拍等)的變量應為1.0f。

最重要的是,我希望在節拍之間隨時間變化的變量在0.0到1.0之間“滑動”,而我的第一個想法是使用C ++標准庫中的sin函數。

關於音頻文件的信息:

  • 文件的速度/ BPM
  • 文件長度(以秒為單位)
  • 音頻文件總共包含多少個節拍
  • 播放文件時的位置。 我知道我現在在幾秒鍾內在歌曲中的哪個位置。 例如,如果歌曲播放了3個半秒,我從使用的函數中得到3.5f

除此之外,我還有一個deltatime和lifetime,該生命周期告訴應用程序已執行了多長時間(以秒為單位)。

由於sin函數將浮點數(或雙精度數)作為參數,因此我需要幫助的是計算,然后可以將其作為參數傳遞給函數,然后將其用於生成與音頻同步的正弦波文件。

盡管此解決方案並非牢不可破,但它應該能夠檢測到簡單音頻文件的節拍: 圖片 在這里,您會看到一個簡單的音頻文件,可以清晰地看到節拍。 我們的目標是找到偏移值,以便我們可以創建cos函數。 查找偏移量值的一種方法是,首先計算文件的平均音量(通過獲取音頻數據的絕對值,因為該值會降至零以下,如下所示)。 我們計算該平均音量以消除可能的噪音。 接下來,我們遍歷所有樣本(您可能只選擇一個音頻通道),並找到絕對值高於此平均值的第一個樣本。 這會在樣本中產生一個偏移值(不秒)。

由於我們知道當前正在播放的時間,因此我們現在可以計算cos函數的值,該函數通過填充我們先前計算的函數的頻率和偏移來可視化音頻。

請糾正我,我在數學上很爛

給定BPM的常規節拍應如下所示。

每秒BPS = BPM / 60

g(x)= cos((x * BPS)* 360)

帶有偏移的節拍應如下所示:

OFFSET_IN_SECONDS = OFFSET_IN_SAMPLES / SAMPLERATE

g(x)= cos((x * BPS + OFFSET_IN_SECONDS)* 360)

重要說明:這些功能的使用程度與RADIANS C ++的使用相反

暫無
暫無

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

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