2014-01-28 165 views
2

我試圖從microSD卡讀卡器播放wav文件。我嘗試使用SimpleSDAudio和TMRpcm庫,但播放速度太快。持續3分鐘的歌曲在1秒內播放。Arduino wav播放播放速度太快

我使用Arduino Uno和Ethernet Shield,內置microSD讀卡器。揚聲器連接到引腳9

#include <SimpleSDAudio.h> 
void setup() 
{ 
    // SdPlay.setSDCSPin(10); // Enable if your SD card CS-Pin is not at Pin 4... 
    SdPlay.init(SSDA_MODE_HALFRATE | SSDA_MODE_MONO | SSDA_MODE_AUTOWORKER); 
    SdPlay.setFile("track.wav"); 
    SdPlay.play(); 
} 

void loop(void) { 
} 
+0

你使用的是什麼確切的代碼?看來你正在使用錯誤的採樣率。你知道原始wav的採樣率嗎? 180倍加速是非同尋常的......你確定你正在閱讀整個文件嗎?您是否會遇到內存問題(32 k RAM,1秒...並非不可能) – Floris

+0

wav是單聲道,速率爲8k,編碼爲無符號8位PCM。歌曲播放時間約爲15秒(我的錯誤,我加載了錯誤的文件)。當我將SSDA_MODE_FULLRATE更改爲SSDA_MODE_HALFRATE時,它會播放更長時間,但仍然太快)。 – nadol

+0

我找到了解決方案,建議是改變採樣率。謝謝弗洛里斯,您的評論引導我回答了 – nadol

回答

2

的問題是,您使用無法播放8K樣本文件庫 - 看http://www.hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio。最慢的速度是32k(取決於你的主板上的時鐘速率) - 所以你會得到4倍的速度提升。

也可能您的緩衝區不夠大。它播放整個文件,還是在結束之前停止播放?你可能想使用

getLastError(); 

,以找出是否錯誤導致播放太早(在文件碎片停下來?你需要一個完全格式化SD卡,並且必須沒有刪除它的任何文件,否則會得到困惑和損壞)。請參閱上面的鏈接瞭解更多詳情。