全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1718
推到 Plurk!
推到 Facebook!

(ACM 聲音壓縮 PCM轉GSM) acmStreamOpen 錯誤?

尚未結案
scott777
一般會員


發表:10
回覆:15
積分:5
註冊:2002-08-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-21 15:04:59 IP:61.230.xxx.xxx 未訂閱
請問各位先進,當小弟執行下列程式碼時 acmStreamOpen總是傳回ACMERR_NOTPOSSIBLE的錯誤 請問要如何解決呢?    ps.如果是PCM 8bits轉PCM 16bits程式又沒問題.
int main(int argc, char* argv[])
{
    MMRESULT mmr;
    WORD wFormatTag = WAVE_FORMAT_GSM610;
        
    HACMDRIVERID hadid = find_driver(wFormatTag);
    if (hadid == NULL) {
        printf("No driver found\n");
        exit(1);
    }
    printf("Driver found (hadid: %4.4lXH)\n", hadid);            HACMDRIVER had = NULL;
    mmr = acmDriverOpen(&had, hadid, 0);
    if (mmr) {
        printf("Failed to open driver\n");
        exit(1);
    }            memset(&wfPCM, 0, sizeof(wfPCM));            // PCM
        wfPCM.cbSize = 0;
        wfPCM.wFormatTag = WAVE_FORMAT_PCM;
        wfPCM.nChannels = 1;
        wfPCM.nSamplesPerSec = 11025;
        wfPCM.wBitsPerSample = 16;
        wfPCM.nBlockAlign = wfPCM.nChannels * wfPCM.wBitsPerSample / 8;        
        wfPCM.nAvgBytesPerSec = wfPCM.nSamplesPerSec * wfPCM.nBlockAlign;            // GSM
        wfDrv.cbSize = 2;
        wfDrv.wFormatTag = WAVE_FORMAT_GSM610;
        wfDrv.nAvgBytesPerSec = 1625;
        wfDrv.nBlockAlign = 65;
        wfDrv.nChannels = 1;
        wfDrv.nSamplesPerSec = 8000;
        wfDrv.wBitsPerSample = 0;            printf("--------------------------------------------------------\n");
        HACMSTREAM hstr = NULL;
    mmr = acmStreamOpen(&hstr,
                        had, 
                        &wfPCM, 
                        &wfDrv, 
                        NULL, 
                        NULL, 
                        0, 
                        ACM_STREAMOPENF_NONREALTIME); 
    if (mmr) {
        printf("Failed to open a stream to do PCM to GSM conversion\n");
                switch(mmr)
                {
                case ACMERR_NOTPOSSIBLE:
                        printf("The requested operation cannot be performed.\n");
                        break;
                case MMSYSERR_INVALFLAG:
                        printf("At least one flag is invalid. \n");
                        break;
                case MMSYSERR_INVALHANDLE:
                        printf("The specified handle is invalid. \n");
                        break;
                case MMSYSERR_INVALPARAM:
                        printf("At least one parameter is invalid. \n");
                        break;
                case MMSYSERR_NOMEM:
                        printf("The system is unable to allocate resources.\n");
                        break; 
                }
        exit(1);
    }
    return 0;
}    
~~~~~~~~~~~~~~~~~~~~~~~ 程式錯誤千萬行, 改來改去費思量, 哀~客戶吵吵又嚷嚷, 真想把他抓來去撞牆。 發表人 - scott777 於 2004/10/21 15:10:38
系統時間:2024-05-15 0:26:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!