Etray 发表于 2014-3-28 15:41:50

关于用arduin播放音乐的问题。请教

搞不懂“SimpleSDAudio”,是怎样实现读取SD数据播放音乐的,就是Play函数、我希望在读取的时候,加入一些控制,不知可不可。。。

Etray 发表于 2014-3-28 18:24:18

:):):):):):):):):):):):):):):):):):)

Be1ieve 发表于 2014-3-28 19:45:46

用过tmrpcm,播放的时候可以控制
SimpleSDAudio没用过,看一下说明应该是在主程序中跑worker(),估计也可以控制
不过转档后音质只能说是勉强能听,最后还是直上vs1003,mp3 320kbps无压力

Etray 发表于 2014-3-28 23:50:09


void SdPlayClass::worker(void) {
if(_pBuf && _fileinfo.Size) {
    uint16_t buflencpy;
    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
    {
      buflencpy = _Buflen;
    }      
    if(_fileinfo.ActBytePos < _fileinfo.Size) {
      // At least space for 1 sector?
      if(buflencpy < (_Bufsize - 512)) {
            int16_t ret;
            ret = SD_L1_ReadBlock(_fileinfo.ActSector++, _pBuf + _Bufin);
            if(!ret) {
               uint32_t BytesLeft = _fileinfo.Size - _fileinfo.ActBytePos;
               _Bufin += 512;
               _fileinfo.ActBytePos += 512;
               if(_Bufin >= _Bufsize) _Bufin -= _Bufsize;
               if(BytesLeft >= 512UL) {
                   ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
                   {
                     _Buflen += 512;
                   }
                } else {
                   ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
                   {
                     _Buflen += BytesLeft;
                   }               
                }
            } else {
            stop();
            _lastError = ret;
            }
      }
    } else {
      // Playback done
      if(buflencpy <= 1) {
      stop();
      }
    }
}
}

Etray 发表于 2014-3-28 23:51:11

Be1ieve 发表于 2014-3-28 19:45 static/image/common/back.gif
用过tmrpcm,播放的时候可以控制
SimpleSDAudio没用过,看一下说明应该是在主程序中跑worker(),估计也可以 ...

谢谢指教!

Etray 发表于 2014-3-28 23:51:54

Be1ieve 发表于 2014-3-28 19:45 static/image/common/back.gif
用过tmrpcm,播放的时候可以控制
SimpleSDAudio没用过,看一下说明应该是在主程序中跑worker(),估计也可以 ...

是这个?不知该怎样改动。。。

Be1ieve 发表于 2014-3-29 08:48:57

库里面的东西除非作者有说要改不然不要动

下面是tmrpcm的范例,库在相关帖子有自己找#include <SD.h>
#include <SPI.h>
#include <TMRpcm.h>

#define SD_PIN 4
#define SPEAKER_PIN 9

TMRpcm audio;

void setup(){
Serial.begin(115200);
while(!Serial); Serial.println();

audio.speakerPin = SPEAKER_PIN;
if(!SD.begin(SD_PIN)){
    Serial.println("Fail to open SD card.");
}
else{
    Serial.println("SD card is ready.");
    audio.play("startup.wav");
}
}

void loop(){
}

Etray 发表于 2014-3-29 09:10:13

Be1ieve 发表于 2014-3-29 08:48 static/image/common/back.gif
库里面的东西除非作者有说要改不然不要动

下面是tmrpcm的范例,库在相关帖子有自己找

哦哦!不知道还有tmrpcm,我试试行不行






Etray 发表于 2014-3-30 09:33:24

Be1ieve 发表于 2014-3-29 08:48 static/image/common/back.gif
库里面的东西除非作者有说要改不然不要动

下面是tmrpcm的范例,库在相关帖子有自己找

还是搞不明白怎样控制。。有加控制的范例吗??

Be1ieve 发表于 2014-3-30 18:36:07

tmrpcm.play("filename"); plays a file
tmrpcm.speakerPin = 11; set to 5,6,11 or 46 for Mega, 9 for Uno, Nano, etc
tmrpcm.disable(); disables the timer on output pin and stops the music
tmrpcm.stopPlayback(); stops the music, but leaves the timer running
tmrpcm.isPlaying();returns 1 if music playing, 0 if not
tmrpcm.pause();pauses/unpauses playback
tmrpcm.volume(0); 1(up) or 0(down) to control volume

所有控制就這些而已
页: [1]
查看完整版本: 关于用arduin播放音乐的问题。请教