Пример #1
0
void generateFile(wchar_t const* filename, size_t n)
{
  int const chunk = 1152;
  PcmGenerator src(chunk);

  OutFile mp3_stream( filename );
  if (!mp3_stream.isOpen()) return;

  Lame lame;
  if (!lame.isOpen()) return;

  OutBuffer mp3_stream_buffer;
  int rc = 0;

  lame.setInSamplerate(44100);
  lame.setOutSamplerate(44100);
  lame.setNumChannels(2);

  while (n > 0) {    
    int const m = n < chunk ? n : chunk;
    if ( n < chunk ) n = 0; else n -= chunk;
    rc = lame.encode(src.ch0(), src.ch1(), m, mp3_stream_buffer.current(), mp3_stream_buffer.unused());
    wprintf(L"rc=%d %d %d\n",rc,mp3_stream_buffer.used(),mp3_stream_buffer.unused());
    if (rc < 0) return;
    mp3_stream_buffer.advance( rc );
    src.advance(m);
  }

  rc = lame.flush(mp3_stream_buffer.current(), mp3_stream_buffer.unused());
  wprintf(L"flush rc=%d\n",rc);
  if (rc < 0) return;

  mp3_stream_buffer.advance( rc );

  int lametag_size = lame.getLameTag(0,0);
  wprintf(L"lametag_size=%d\n",lametag_size);

  rc = lame.getLameTag(mp3_stream_buffer.begin(), lametag_size);
  wprintf(L"rc=%d\n",rc);
  if (rc < 0) return;

  mp3_stream.write(mp3_stream_buffer.begin(), mp3_stream_buffer.used());

  lame.close();
}
Пример #2
0
int main(int argc, char**argv)
{
	int rc=0, bytes_encoded=0, bytes_wrote=0;
	const unsigned int pcm_size = 10240;
	short int pcm[pcm_size]; // raw pcm
	const int mp3buffer_size = 10240;
	unsigned char mp3buffer[mp3buffer_size]; // cooked mp3
	FILE * fp = NULL; // output file

	try {
		Lame lame;
		// open out file
		fp = fopen("out.mp3", "wb");
		// encoding loop 
		for(int i=0;i<10;i++)
		{
			printf("lame_encode_buffer()...\n");
			fill_it_up_with_noise(pcm, pcm_size);
			bytes_encoded = lame.encode(pcm, pcm, pcm_size, mp3buffer, mp3buffer_size);
			bytes_wrote = fwrite(mp3buffer, 1, bytes_encoded, fp);
			if(bytes_wrote!=bytes_encoded)
			{
				stringstream ss;
				ss << "Failed to save chunk to file. bytes_wrote=" << bytes_wrote << endl;
				throw app_exception(ss.str().c_str());
			}
		}
	}
	catch(app_exception& e)
	{
		printf("EXCEPTION: %s\n", e.msg());
	}

	printf("rc = %d\n", rc);
	if(fp) {
		fflush(fp);
		fclose(fp);
	}
	return 0;
}