diff Plugins/Input/console/demo_panning.cpp @ 90:252843aac42f trunk

[svn] Import the initial sources for console music support.
author nenolod
date Tue, 01 Nov 2005 19:57:26 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/Input/console/demo_panning.cpp	Tue Nov 01 19:57:26 2005 -0800
@@ -0,0 +1,67 @@
+
+// Use Panning_Buffer to add left/right panning while playing "test.vgm" using Vgm_Emu,
+// and record to "out.wav".
+
+#include "Vgm_Emu.h"
+#include "Wave_Writer.hpp"
+#include "Panning_Buffer.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+static void exit_if_error( const char* str )
+{
+	if ( str ) {
+		fprintf( stderr, "Error: %s\n", str );
+		exit( EXIT_FAILURE );
+	}
+}
+
+int main()
+{
+	const long sample_rate = 44100;
+	
+	// Create panning buffer with 1/30 second length
+	Panning_Buffer buf;
+	exit_if_error( buf.sample_rate( sample_rate, 1000 / 30 ) );
+	
+	// Prepare emulator with output set to panning buffer
+	Vgm_Emu* emu = new Vgm_Emu;
+	if ( !emu )
+		exit_if_error( "Out of memory" );
+	exit_if_error( emu->init( &buf ) );
+	
+	// Load file
+	Emu_Std_Reader reader;
+	exit_if_error( reader.open( "test.vgm" ) );
+	Vgm_Emu::header_t header;
+	exit_if_error( reader.read( &header, sizeof header ) );
+	exit_if_error( emu->load( header, reader ) );
+	
+	// Configure panning buffer
+	buf.set_pan( 0, 1.40, 0.60 );  // pulse 1 - left
+	buf.set_pan( 1, 1.00, 1.00 );  // pulse 2 - center
+	buf.set_pan( 2, 0.40, 1.60 );  // pulse 3 - right
+	buf.set_pan( 3, 1.00,-1.00 );  // noise   - "surround" (phase-inverted left/right)
+	
+	// Record first track for several seconds
+	exit_if_error( emu->start_track( 0 ) );
+	Wave_Writer wave( sample_rate, "out.wav" );
+	wave.stereo( true );
+	while ( wave.sample_count() < 2 * sample_rate * 10 )
+	{
+		const long buf_size = 1234; // can be any size
+		Music_Emu::sample_t buf [buf_size];
+		
+		// fill buffer
+		exit_if_error( emu->play( buf_size, buf ) );
+		
+		// write to sound file
+		wave.write( buf, buf_size );
+	}
+	
+	delete emu;
+	
+	return 0;
+}
+