annotate Plugins/Input/console/demo.cpp @ 108:cde5ca21ddc3 trunk

[svn] Improved latency on the decode loop.
author nenolod
date Wed, 02 Nov 2005 21:45:23 -0800
parents 252843aac42f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
90
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
1
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
2 // Play "test.nsf" using Nsf_Emu and record to "out.wav".
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
3
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
4 #include "Nsf_Emu.h"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
5 #include "Wave_Writer.hpp"
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
6
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
7 #include <stdlib.h>
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
8 #include <stdio.h>
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
9
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
10 static void exit_if_error( const char* str )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
11 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
12 if ( str ) {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
13 fprintf( stderr, "Error: %s\n", str );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
14 exit( EXIT_FAILURE );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
15 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
16 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
17
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
18 int main()
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
19 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
20 const long sample_rate = 44100;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
21
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
22 // Prepare emulator
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
23 Nsf_Emu* emu = new Nsf_Emu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
24 if ( !emu )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
25 exit_if_error( "Out of memory" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
26 exit_if_error( emu->init( sample_rate ) );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
27
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
28 // Load file
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
29 Emu_Std_Reader reader;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
30 exit_if_error( reader.open( "test.nsf" ) );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
31 Nsf_Emu::header_t header;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
32 exit_if_error( reader.read( &header, sizeof header ) );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
33 exit_if_error( emu->load( header, reader ) );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
34
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
35 // Print game and song info
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
36 printf( "Game : %-32s\n", header.game ? (char*) header.game : "" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
37 printf( "Song : %-32s\n", header.song ? (char*) header.song : "" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
38 printf( "Author : %-32s\n", header.author ? (char*) header.author : "" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
39 printf( "Copyright: %-32s\n", header.copyright ? (char*) header.copyright : "" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
40 printf( "Tracks : %d\n", emu->track_count() );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
41 printf( "\n" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
42
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
43 // Record first track for several seconds
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
44 exit_if_error( emu->start_track( 0 ) );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
45 Wave_Writer wave( sample_rate, "out.wav" );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
46 wave.stereo( true );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
47 while ( wave.sample_count() < 2 * sample_rate * 10 )
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
48 {
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
49 const long buf_size = 1024; // must be even
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
50 Music_Emu::sample_t buf [buf_size];
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
51
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
52 // fill buffer
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
53 exit_if_error( emu->play( buf_size, buf ) );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
54
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
55 // write to sound file
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
56 wave.write( buf, buf_size );
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
57 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
58
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
59 delete emu;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
60
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
61 return 0;
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
62 }
252843aac42f [svn] Import the initial sources for console music support.
nenolod
parents:
diff changeset
63