Dùng Delphi để lập chương trình thu và phát tiếng nói, dùng các hàm API của Windows (WaveIn_, WaveOut_) nhưng luôn bị báo lỗi tại hàm WaveInOpen?

Dùng Delphi để lập chương trình thu và phát tiếng nói, dùng các hàm API của Windows (WaveIn_, WaveOut_) nhưng luôn bị báo lỗi tại hàm WaveInOpen
tran van hai
tran van hai
Trả lời 15 năm trước
Để lập trình thu/phát âm thanh, bạn có thể dùng 1 trong nhiều giao tiếp lập trình khác nhau, trong đó dùng các hàm API của Windows là cách mà nhiều người đã dùng, tuy nhiên bạn cần tuân thủ nghiêm ngặt trình tự gọi các hàm API cũng như xác định đúng giá trị các tham số của từng hàm thì mới có thể thu/phát âm thanh thành công. Trình tự gọi các hàm API điển hình để thu âm thanh từ thiết bị thu là waveInOpen(), waveInPrepareHeader(), waveInAddBuffer(), waveInStart(), waveInStop(), waveInReset(), waveInUnprepareHeader(), waveInClose(). Để lập trình nhanh module thu âm thanh, bạn nên tham khảo đoạn code giải quyết vấn đề này, kế thừa nó rồi hiệu chỉnh lại theo yêu cầu riêng của mình. Nếu lập trình bằng Delphi, bạn có thể download trình thu âm thanh WaveIn viết bằng Delphi của Jérôme Thormann ở địa chỉ http://www.torry.net/samples/graphics/wavein.zip. Nếu lập trình bằng VC++, bạn có thể copy trình VidCap (video capture) trên CD MSDN của Microsoft, xem file dialog.c để biết trình tự điển hình thu âm thanh. Chúng tôi đã thử dịch các phần mềm này và thử chạy chúng, kết quả hoạt động tốt, thu/phát âm bình thường chứ không hề gặp lỗi như bạn trình bày. Lưu ý rằng trước khi debug chương trình thu/phát âm của mình, bạn nên kiểm tra lại Windows và/hoặc soundcard có làm việc tốt không bằng các phần mềm thu/phát âm thanh sẵn có (như tiện ích sẵn có Sound Recorder của Windows).