- 在线时间
- 0 小时
- 最后登录
- 2004-12-14
- 注册时间
- 2004-6-4
- 听众数
- 1
- 收听数
- 0
- 能力
- 0 分
- 体力
- 109 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 38
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 9
- 主题
- 5
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   34.74% 该用户从未签到
 |
< >有关于ACM压缩的BCB代码段:</P>. q3 [- Z; w1 H/ A* A
< >开始的时候有一个采样的过程和格式设定:</P>
/ I0 b; e) [* V0 f5 Q. o% Q/ i< >void CCompression::SetWaveFormat(int channels, long samplerate, int bitspersample)& }* l8 n8 \' [: {7 l; A$ l3 L- ^5 Y
{9 {7 s: i$ T# ~, R
memset(&m_wfSrc, 0, sizeof(m_wfSrc));
/ E0 y+ R6 ~* r# l m_wfSrc.cbSize = 0;
8 w/ y1 k( T$ M* h8 V; x m_wfSrc.wFormatTag = WAVE_FORMAT_PCM; // pcm
3 \/ u) s' p4 d3 P8 U" U9 k m_wfSrc.nChannels = channels; // mono
) m1 K# D. w% Q3 ]0 T' a m_wfSrc.nSamplesPerSec = samplerate; // 11.025 kHz* K% [& ?) G* U
m_wfSrc.wBitsPerSample = bitspersample; // 8 bit
3 @! Y& q5 j! k% f3 q u' P ~ m_wfSrc.nBlockAlign = m_wfSrc.nChannels *m_wfSrc.wBitsPerSample / 8;
" e; ^+ D7 Y6 g2 \) Z. m5 B, y m_wfSrc.nAvgBytesPerSec = m_wfSrc.nSamplesPerSec * m_wfSrc.nBlockAlign;5 j8 D, G8 O* d1 a$ w# I
}</P>
+ H1 f8 t; O0 E% d' \# x% j) `( b0 c7 m y0 Y, r1 j" V/ X( K; @2 W; }
< >void CCompression::SetSrcSamples(long samples,unsigned char* pSrcData)
; J& M6 s9 c- g2 V3 {{
8 A0 a# g2 M( z* ?; n$ A, h7 i int n=(int)(m_wfSrc.wBitsPerSample/8);</P>+ N6 j7 ^% k+ G, J2 f
< > m_dwSrcSamples=samples;2 z, t+ E" F5 S3 K5 p
m_dwSrcBytes=(DWORD)(samples*n);+ C1 O5 Y% Y8 ?+ H6 K, o
m_pSrcData=(BYTE*)malloc(m_dwSrcBytes);
( ?3 s4 q% ?! Q memcpy(m_pSrcData,pSrcData,m_dwSrcBytes);
3 F1 H. U4 C) J}</P>% ?+ |/ {; @$ {. Z
< >请教这段程序的功能!</P>! E, U [; K9 W$ Z: s2 s+ Z: G
< > // enumerate the formats it supports
7 w& L; w8 ]: f1 m/ Y- v& f8 M, C# f; P DWORD dwSize = 0;! X4 d0 i, X; H8 w
mmr = acmMetrics((HACMOBJ)had, ACM_METRIC_MAX_SIZE_FORMAT, &dwSize);) c& g y3 C, h* u: V" t
if (dwSize < sizeof(WAVEFORMATEX)) dwSize = sizeof(WAVEFORMATEX); // for MS-PCM
' t, }: a/ S7 ?4 h WAVEFORMATEX* pwf = (WAVEFORMATEX*) malloc(dwSize);
$ t# o! @ r, ^; C% p memset(pwf, 0, dwSize);6 N) k3 b% i# r/ w
pwf->cbSize = LOWORD(dwSize) - sizeof(WAVEFORMATEX);
& Q S- o2 m1 Y1 C4 H pwf->wFormatTag = pdi->wFormatTag;</P>
) P1 n' f& Q l& B< >还有这段是长度转换部分PCM-PCM。但是我不清楚具体的实现原理,以及这样做的目的!</P>
/ K, g" n/ Q9 }3 b% Q9 I< >谢谢!</P> |
zan
|