温锦山《Delphi串口及语音传真高级编程》有详细介绍。网上有电子书。如需买书请联系我。

解决方案 »

  1.   

    就20分?procedure TFrmMain.ApdTapiDeviceTapiWaveNotify(CP: TObject;
    Msg: TWaveMessage);
    var
    TimeStr: string;
    FileName: string;
    begin
    //决不能在case外做耗时的操作
    case Msg of
    waPlayOpen: LBSysInfo.Items.Add('wavnotify:播放开始');
    waPlayDone:
    begin
    LBSysInfo.Items.Add('wavnotify:播放结束');
    if CurrentState = csRecording then
    begin
    try
          //等待波设备状态为wsIdle再开始录音
    while ApdTapiDevice.WaveState <> wsIdle do
    Application.ProcessMessages;
    ApdTapiDevice.InterruptWave := True;
    ApdTapiDevice.StartWaveRecord;
    LBSysInfo.Items.Add('dtmf:录音成功');
    except
    LBSysInfo.Items.Add('dtmf:录音失败');
    end;
    end;
    end;
    waPlayClose: LBSysInfo.Items.Add('wavnotify:播放关闭');
    waRecordOpen: LBSysInfo.Items.Add('wavnotify:录音开始');
    waDataReady:
    begin
    LBSysInfo.Items.Add('wavnotify:数据准备');
    TimeSeparator := '-';
    FileName := DateTimeToStr(Now) + '.wav';
    try
    ApdTapiDevice.SaveWaveFile(ExtractFilePath(ParamStr(0)) + 'record\' +
    FileName, True);
    LBSysInfo.Items.Add('wavNotify:保存声音文件 ' + FileName);
    except
    LBSysInfo.Items.Add('wavnotify:保存声音文件失败');
    end;
    end;
    waRecordClose:
    begin
    LBSysInfo.Items.Add('wavnotify:记录声音结束');
    CurrentState := csWaiting;
    ActionCancelExecute(nil);
    Timer1.Enabled := True;
    end;
    end;
    end;http://www.programfan.com/article/showarticle.asp?id=2408