更新 - 使用libmpg123转换MP3到WAVE

更新 - 使用libmpg123转换MP3到WAVE

    一个更简单的方法,不使用Frame,而是直接用Read方式;顺便也修改几个不对的地方。这种Decode方式更符合DSound的需要。主要改动如下:
 1       while ( true )
 2      {
 3          ret  =  mpg123_init();
 4           if (ret  !=  MPG123_OK)
 5               break ;
 6          mpg123_handle  * =  mpg123_new(NULL,  & ret);
 7           if (h  ==  NULL)
 8               break ;
 9          ret  =  mpg123_open(h,  " .\\orgrimmar_intro-moment.mp3 " );
10           if (ret  !=  MPG123_OK)
11               break ;
12 
13           long  rate  =   0 ;
14           int  channel  =   0 , encoding  =   0 ;
15          ret  =  mpg123_getformat(h,  & rate,  & channel,  & encoding);    
16           if (ret  !=  MPG123_OK)
17               break ;
18           if ((encoding  &  MPG123_ENC_16)  ==  MPG123_ENC_16)
19              encoding  =   16 ;
20           else   if ((encoding  &  MPG123_ENC_32)  ==  MPG123_ENC_32)
21              encoding  =   32 ;
22           else
23              encoding  =   8 ;
24 
25          WAVE_HEADER header;
26          InitWaveHeader(header, channel, rate, encoding,  0 );
27 
28          UpdateWaveHeader(header,  true );
29          
30          unsigned  char  buffer[ 32   *   1024 ];
31          size_t size  =   32   *   1024 ;
32          size_t outsize  =   0 ;
33 
34           do
35          {
36              ret  =  mpg123_read(h, buffer, size,  & outsize);
37              header.data_size  +=  outsize;
38 
39              AppendWaveData(( const   char * )buffer, outsize);
40 
41          } while (ret  ==  MPG123_OK);
42 
43          mpg123_close(h);
44          mpg123_delete(h);
45          mpg123_exit();
46 
47          header.waveform_chunk_size  =  header.data_size  +   36 ;
48 
49          UpdateWaveHeader(header,  false );
50 
51 
52           break ;
53      }
54 
55       if (ret  !=  MPG123_OK  &&  ret  !=  MPG123_DONE)
56      {
57              std::cout  <<   " error :  "   <<  mpg123_plain_strerror(ret)  <<  std::endl;
58               return   - 1 ;
59      }
60 
61      CloseWaveFile();


你可能感兴趣的:(更新 - 使用libmpg123转换MP3到WAVE)