2011-01-27 65 views
3

好吧,這樣的smth,我在教程中看到,但我想保存在音樂播放器的可讀格式之一。可能嗎?QtMultimedia,我如何保存任何格式的錄音,如mp3,wav或smth其他?

file = new QFile("smth.raw"); 
file->open(QIODevice::WriteOnly | QIODevice::Truncate); 

QAudioFormat format; 
format.setFrequency(8000); 
format.setChannels(1); 
format.setSampleSize(8); 
format.setCodec("audio/pcm"); 
format.setByteOrder(QAudioFormat::LittleEndian); 
format.setSampleType(QAudioFormat::UnSignedInt); 
QAudioDeviceInfo info = QAudioDeviceInfo::defaultInputDevice(); 
if (!info.isFormatSupported(format)) { 
    qWarning()<<"default format not supported try to use nearest"; 
    format = info.nearestFormat(format); 
} 
audioInput = new QAudioInput(format, this); 

回答

3

那麼,如果它對某人有意思,那就是算法轉換。如果你有更好的主意,請回復!

#include <stdio.h> 
int rawToWav(const char *rawfn, const char *wavfn, long frequency) 
{ 
    long chunksize=0x10; 

    struct 
    { 
     unsigned short wFormatTag; 
     unsigned short wChannels; 
     unsigned long  dwSamplesPerSec; 
     unsigned long  dwAvgBytesPerSec; 
     unsigned short wBlockAlign; 
     unsigned short wBitsPerSample; 
    } fmt; 

    FILE *raw = fopen(rawfn,"rb"); 
    if(!raw) 
     return -2; 

    fseek(raw, 0, SEEK_END); 
    long bytes = ftell(raw); 
    fseek(raw, 0, SEEK_SET); 

    long samplecount = bytes/2; 
    long riffsize = samplecount*2+0x24; 
    long datasize = samplecount*2; 

    FILE *wav=fopen(wavfn,"wb"); 
    if(!wav) 
    { 
     fclose(raw); 
     return -3; 
    } 

    fwrite("RIFF",  1, 4, wav); 
    fwrite(&riffsize, 4, 1, wav); 
    fwrite("WAVEfmt ", 1, 8, wav); 
    fwrite(&chunksize, 4, 1, wav); 

    fmt.wFormatTag = 1;  // PCM 
    fmt.wChannels = 1;  // MONO 
    fmt.dwSamplesPerSec = frequency*1; 
    fmt.dwAvgBytesPerSec = frequency*1*2; // 16 bit 
    fmt.wBlockAlign  = 2; 
    fmt.wBitsPerSample = 16; 

    fwrite(&fmt,  sizeof(fmt), 1, wav); 
    fwrite("data", 1,   4, wav); 
    fwrite(&datasize, 4,   1, wav); 
    short buff[1024]; 
    while(!feof(raw)) 
    { 
      int cnt=fread(buff,2,1024,raw); 
      if(cnt == 0) 
       break; 
      fwrite(buff,2,cnt,wav); 
    } 
    fclose(raw); 
    fclose(wav); 
} 
+0

非常感謝,這對我來說已經足夠了。從那裏有很多工具可以轉換成MP3和其他格式。 – 2011-09-26 11:50:36

相關問題