阅读:1909回复:9
谁能告诉我怎样改变声音播放速度
我想要控制声卡播放声音的速度
谁能告诉我怎样改变声音播放速度? 或告诉我的思路也行 先感谢了!!! -----yangyang |
|
|
沙发#
发布于:2002-04-17 08:45
MMRESULT waveOutGetPlaybackRate(
HWAVEOUT hwo, LPDWORD pdwRate ); Parameters hwo Handle of the waveform-audio output device. pdwRate Address of a variable to be filled with the current playback rate. The playback rate setting is a multiplier indicating the current change in playback rate from the original authored setting. The playback rate multiplier must be a positive value. The rate is specified as a fixed-point value. The high-order word of the variable contains the signed integer part of the number, and the low-order word contains the fractional part. A value of 0x8000 in the low-order word represents one-half, and 0x4000 represents one-quarter. For example, the value 0x00010000 specifies a multiplier of 1.0 (no playback rate change), and a value of 0x000F8000 specifies a multiplier of 15.5. Return Values Returns MMSYSERR_NOERROR if successful or an error otherwise. Possible error values include the following: Value Description MMSYSERR_INVALHANDLE Specified device handle is invalid. MMSYSERR_NODRIVER No device driver is present. MMSYSERR_NOMEM Unable to allocate or lock memory. MMSYSERR_NOTSUPPORTED Function isn\'t supported. |
|
板凳#
发布于:2002-04-18 10:30
不知你要如何改变播放速度?我搞过一段时间的音频录放,压缩
用的是 waveI/O,acm接口. 改变播放速度,可以用上面提到的那个函数,但前提是你的声卡 要支持该功能.否则要自己在软件里通过处理回放数据实现这一效果. 不知这是不是你需要的,如是的话可以发一份源码给你,在回放 的回调函数中对回放数据作点处理就可以了. |
|
地板#
发布于:2002-04-18 19:54
十分感激您Snake!!
我的声卡是CMI8738的芯片,我想自己编程控制声卡播放声音的速度.我搞了很久,但就是没有结果,我感到很烦恼. 我真诚盼望您寄给我一份源码,作为参考!!!!!!!!!!! 我再次表示非常非常的感谢!!!! -------------------------- yangyang [编辑 - 4/19/02 作者: yangyang] |
|
|
地下室#
发布于:2002-04-20 00:48
我受到你的源码后真不知怎样感谢您!!!!!
不过你的程序好像有点问题!!! 打开*.wav文件后什么反映都没有!!! 能否告诉我??????????????????????? 谢谢了!!!!!!!!!!!!!!!!!! |
|
|
5楼#
发布于:2002-04-20 19:06
能播放的文件是用Mp3压缩过得,看看我给你的源码有没有
这个L3codeca.acm文件,有的话把它copy到 \\debug,或windwos\\system目录下。 没有的话,周一我上班再发给你。 播放的回调函数是: void CALLBACK CRec::waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) 其中: pThis->pPlayMp3->mp3Conver(pWaveData,LenSrc,pCMP3Data,&DL); 是解压缩。 pThis->pPlayWaveIO->WriteAudioOutBuffer(pCMP3Data,DL); 是播放解出的数据。数据指针为pCMP3Data,长度为DL, 在播放前修改,处理数据就可以实现你要求的效果了。 |
|
6楼#
发布于:2002-04-20 19:25
谢谢您Snake
我收到您的源码后!!!里面有错误文件。可能是压缩错误。 希望您能从新压。 我遇到问题是不能录音,本播放*.wav问文件无反映。 如果我想把声音加快后减慢,应该修该什么地方? 谢谢你对我的帮助!!!!! |
|
|
7楼#
发布于:2002-04-21 13:05
能播放的文件是用Mp3压缩过得,看看我给你的源码有没有 我照你的做了,但是我不熟悉,没成功,能否再驾劳你指点以下或更详细一点。好吗? 拜托了 |
|
|
8楼#
发布于:2002-04-22 10:40
修改播放的原始数据可以产生你需要的任何效果,至于具体的
算法,我也没搞过,请你自行查阅相关资料. 如果你仅是要快慢放,告诉你一个简单的方法,改这个地方: pPlayWfxDst=(LPWAVEFORMATEX)malloc(pPlayMp3->GetwfxDstSize()); pPlayMp3->Getwfx(pPlayWfxDst); mRState.PlayDstDataLen=pPlayMp3->GetCDataLen(); pPlayWfxDst->nSamplesPerSec =18000; if(!pPlayWaveIO->StartOut((DWORD)waveOutProc,pPlayWfxDst, mRState.PlayDstDataLen*2)) { StopPlay(); return 3; pPlayWfxDst->nSamplesPerSec =*****; 是后加的,在我给你的例子 中,录制的采样频率是22050,你通过强制改变回放的频率可以改变 回放速度,****=11025就是慢一倍的速度回放,xxxx=44100就是快一倍 的速度回放.速度快慢由****的值决定,xxxx可在44100~8000左右任选 } |
|
9楼#
发布于:2002-04-22 13:14
谢谢您!Snake
我就是想改变声音的速度。我回去试一下。如果不行还得向您请教 对了,如果您有什么困难而不能解决,不要忘了我。也许帮得着。 谢谢!!!!!!!!!!!!! :) :) :) :) :) :) :) :) :) :) :) :) :) :) |
|
|