Mercurial > audlegacy-plugins
annotate src/console/Audacious_Driver.cxx @ 1791:ea7ec02f2ea2
Automated merge with ssh://hg.atheme-project.org//hg/audacious-plugins
| author | Jonathan Schleifer <js@h3c.de> |
|---|---|
| date | Mon, 24 Sep 2007 19:19:59 +0200 |
| parents | c3fdb0e5a306 |
| children | 2a5ee6ed598d |
| rev | line source |
|---|---|
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
1 /* |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
2 * Audacious: Cross platform multimedia player |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
3 * Copyright (c) 2005-2006 Audacious Team |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
4 * |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
5 * Driver for Game_Music_Emu library. See details at: |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
6 * http://www.slack.net/~ant/libs/ |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
7 */ |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
8 |
|
1766
c3fdb0e5a306
Convert some makefiles, remove some -DHAVE_CONFIG_H.
William Pitcock <nenolod@atheme.org>
parents:
1734
diff
changeset
|
9 #include "config.h" |
| 528 | 10 |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
11 #include <glib.h> |
|
527
d124034ebea3
[svn] - glib/gi18n.h -> audacious/i18n.h for automatic dgettext support
nenolod
parents:
385
diff
changeset
|
12 #include <audacious/i18n.h> |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
13 #include <gtk/gtk.h> |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
14 extern "C" { |
|
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
15 #include "audacious/main.h" |
|
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
16 #include "audacious/tuple.h" |
|
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
17 #include "audacious/tuple_formatter.h" |
|
3
088092a52fea
[svn] - move from (internal) libaudacious/ include path to audacious/ include path
nenolod
parents:
0
diff
changeset
|
18 #include "audacious/util.h" |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
19 #include "audacious/output.h" |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
20 #include "audacious/playlist.h" |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
21 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
22 #include <string.h> |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
23 #include <stdlib.h> |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
24 #include <math.h> |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
25 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
26 // configdb and prefs ui |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
27 #include "Audacious_Config.h" |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
28 |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
29 #include "Music_Emu.h" |
| 341 | 30 #include "Gzip_Reader.h" |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
31 |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
32 int const fade_threshold = 10 * 1000; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
33 int const fade_length = 8 * 1000; |
| 341 | 34 int const path_max = 4096; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
35 |
|
1498
a1fccf242404
made SPC playback reverb a configuration option till the problem can be
mf0102 <0102@gmx.at>
parents:
1473
diff
changeset
|
36 AudaciousConsoleConfig audcfg = |
|
1499
799f92d815b2
removed NSFE playlist option (which was marked TODO)
mf0102 <0102@gmx.at>
parents:
1498
diff
changeset
|
37 { 180, FALSE, 32000, 0, 0, FALSE, 0, FALSE }; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
38 static GThread* decode_thread; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
39 static GStaticMutex playback_mutex = G_STATIC_MUTEX_INIT; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
40 static int console_ip_is_going; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
41 static volatile long pending_seek; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
42 extern InputPlugin console_ip; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
43 static Music_Emu* emu = 0; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
44 |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
45 static blargg_err_t log_err( blargg_err_t err ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
46 { |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
47 if ( err ) |
|
380
1397798646fb
[svn] - change use of printf to g_warning() and g_critical() where appropriate.
nenolod
parents:
378
diff
changeset
|
48 g_critical( "console error: %s\n", err ); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
49 return err; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
50 } |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
51 |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
52 static void log_warning( Music_Emu* emu ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
53 { |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
54 const char* w = emu->warning(); |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
55 if ( w ) |
|
380
1397798646fb
[svn] - change use of printf to g_warning() and g_critical() where appropriate.
nenolod
parents:
378
diff
changeset
|
56 g_warning( "console warning: %s\n", w ); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
57 } |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
58 |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
59 static void unload_file() |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
60 { |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
61 if ( emu ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
62 log_warning( emu ); |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
63 gme_delete( emu ); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
64 emu = NULL; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
65 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
66 |
| 341 | 67 // Handles URL parsing, file opening and identification, and file loading. |
| 68 // Keeps file header around when loading rest of file to avoid seeking | |
| 69 // and re-reading. | |
| 70 class File_Handler { | |
| 71 public: | |
| 72 gchar* path; // path without track number specification | |
| 73 int track; // track number (0 = first track) | |
| 74 bool track_specified; // false if no track number was specified in path | |
| 75 Music_Emu* emu; // set to 0 to take ownership | |
| 76 gme_type_t type; | |
| 77 | |
| 78 // Parses path and identifies file type | |
|
385
ac806e416c48
[svn] - some improvements for chiptune expansion efficiency
nenolod
parents:
382
diff
changeset
|
79 File_Handler( const char* path, VFSFile* fd = 0, gboolean is_our_file_hack = FALSE ); |
| 341 | 80 |
| 81 // Creates emulator and returns 0. If this wasn't a music file or | |
| 82 // emulator couldn't be created, returns 1. | |
| 83 int load( long sample_rate ); | |
| 84 | |
| 85 // Deletes owned emu and closes file | |
| 86 ~File_Handler(); | |
| 87 private: | |
| 88 char header [4]; | |
| 89 Vfs_File_Reader vfs_in; | |
| 90 Gzip_Reader in; | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
91 }; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
92 |
|
385
ac806e416c48
[svn] - some improvements for chiptune expansion efficiency
nenolod
parents:
382
diff
changeset
|
93 File_Handler::File_Handler( const char* path_in, VFSFile* fd, gboolean is_our_file_hack ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
94 { |
| 341 | 95 emu = 0; |
| 96 type = 0; | |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
97 track = 0; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
98 track_specified = false; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
99 |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
100 path = g_strdup( path_in ); |
| 341 | 101 if ( !path ) |
| 102 return; // out of memory | |
| 103 | |
| 104 // extract track number | |
| 105 gchar* args = strchr( path, '?' ); // TODO: use strrchr()? | |
| 752 | 106 if ( args && g_ascii_isdigit( (guchar) *(args + 1) ) ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
107 { |
| 341 | 108 *args = '\0'; |
| 109 // TODO: use func with better error reporting, and perhaps don't | |
| 110 // truncate path if there is no number after ? | |
|
1734
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
111 track = atoi( args + 1 ) - 1; |
| 341 | 112 track_specified = true; |
| 113 } | |
|
381
53056ce7940d
[svn] - avoid opening VFS FDs for track URIs where we know that the file is valid
nenolod
parents:
380
diff
changeset
|
114 |
|
53056ce7940d
[svn] - avoid opening VFS FDs for track URIs where we know that the file is valid
nenolod
parents:
380
diff
changeset
|
115 // if the track is specified, then we have a match. don't worry |
|
53056ce7940d
[svn] - avoid opening VFS FDs for track URIs where we know that the file is valid
nenolod
parents:
380
diff
changeset
|
116 // about it right now -nenolod |
|
385
ac806e416c48
[svn] - some improvements for chiptune expansion efficiency
nenolod
parents:
382
diff
changeset
|
117 if (track_specified && is_our_file_hack) |
|
381
53056ce7940d
[svn] - avoid opening VFS FDs for track URIs where we know that the file is valid
nenolod
parents:
380
diff
changeset
|
118 return; |
| 341 | 119 |
| 120 // open vfs | |
| 121 if ( fd ) | |
| 122 vfs_in.reset( fd ); | |
| 123 else if ( log_err( vfs_in.open( path ) ) ) | |
| 124 return; | |
| 125 | |
| 126 // now open gzip_reader on top of vfs | |
| 127 if ( log_err( in.open( &vfs_in ) ) ) | |
| 128 return; | |
| 129 | |
| 130 // read and identify header | |
| 131 if ( !log_err( in.read( header, sizeof header ) ) ) | |
| 132 { | |
| 133 type = gme_identify_extension( gme_identify_header( header ) ); | |
| 134 if ( !type ) | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
135 { |
| 341 | 136 type = gme_identify_extension( path ); |
| 137 if ( type != gme_gym_type ) // only trust file extension for headerless .gym files | |
| 138 type = 0; | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
139 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
140 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
141 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
142 |
| 341 | 143 File_Handler::~File_Handler() |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
144 { |
| 341 | 145 gme_delete( emu ); |
| 146 g_free( path ); | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
147 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
148 |
| 341 | 149 int File_Handler::load( long sample_rate ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
150 { |
| 341 | 151 if ( !type ) |
| 152 return 1; | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
153 |
| 341 | 154 emu = gme_new_emu( type, sample_rate ); |
| 155 if ( !emu ) | |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
156 { |
| 341 | 157 log_err( "Out of memory" ); |
| 158 return 1; | |
| 159 } | |
| 160 | |
| 161 { | |
| 162 // combine header with remaining file data | |
| 163 Remaining_Reader reader( header, sizeof header, &in ); | |
| 164 if ( log_err( emu->load( reader ) ) ) | |
| 165 return 1; | |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
166 } |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
167 |
| 341 | 168 // files can be closed now |
| 169 in.close(); | |
| 170 vfs_in.close(); | |
| 171 | |
| 172 log_warning( emu ); | |
| 173 | |
| 174 // load .m3u from same directory( replace/add extension with ".m3u") | |
| 175 char m3u_path [path_max + 5]; | |
| 176 strncpy( m3u_path, path, path_max ); | |
| 177 m3u_path [path_max] = 0; | |
| 178 // TODO: use better path-building functions | |
| 179 char* p = strrchr( m3u_path, '.' ); | |
| 180 if ( !p ) | |
| 181 p = m3u_path + strlen( m3u_path ); | |
| 182 strcpy( p, ".m3u" ); | |
| 183 | |
| 184 Vfs_File_Reader m3u; | |
| 185 if ( !m3u.open( m3u_path ) ) | |
| 186 { | |
| 187 if ( log_err( emu->load_m3u( m3u ) ) ) // TODO: fail if m3u can't be loaded? | |
| 188 log_warning( emu ); // this will log line number of first problem in m3u | |
| 189 } | |
| 190 | |
| 191 return 0; | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
192 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
193 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
194 // Get info |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
195 |
| 603 | 196 static inline gchar *selective_strdup(const gchar *in) |
| 197 { | |
| 198 if (in == NULL || *in == '\0') | |
| 199 return NULL; | |
| 200 | |
| 201 return g_strdup(in); | |
| 202 } | |
| 203 | |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
204 static Tuple* get_track_ti( const char* path, track_info_t const& info, int track ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
205 { |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
206 Tuple* ti = tuple_new(); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
207 if ( ti ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
208 { |
|
1687
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
209 tuple_associate_string(ti, FIELD_FILE_NAME, NULL, g_path_get_basename(path)); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
210 tuple_associate_string(ti, FIELD_FILE_PATH, NULL, g_path_get_dirname(path)); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
211 tuple_associate_string(ti, FIELD_ARTIST, NULL, info.author); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
212 tuple_associate_string(ti, FIELD_ALBUM, NULL, info.game); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
213 tuple_associate_string(ti, -1, "game", info.game); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
214 tuple_associate_string(ti, FIELD_TITLE, NULL, info.song ? info.song : g_path_get_basename(path)); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
215 if ( info.track_count > 1 ) |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
216 { |
|
1687
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
217 tuple_associate_int(ti, FIELD_TRACK_NUMBER, NULL, track + 1); |
|
1734
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
218 tuple_associate_int(ti, -1, "subsong", track + 1); |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
219 tuple_associate_int(ti, FIELD_SUBSONG_ID, NULL, track + 1); |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
220 tuple_associate_int(ti, FIELD_SUBSONG_NUM, NULL, info.track_count); |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
221 } |
|
1687
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
222 tuple_associate_string(ti, FIELD_COPYRIGHT, NULL, info.copyright); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
223 tuple_associate_string(ti, -1, "console", info.system); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
224 tuple_associate_string(ti, FIELD_CODEC, NULL, info.system); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
225 tuple_associate_string(ti, FIELD_QUALITY, NULL, "sequenced"); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
226 tuple_associate_string(ti, -1, "dumper", info.dumper); |
|
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
227 tuple_associate_string(ti, FIELD_COMMENT, NULL, info.comment); |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
228 |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
229 int length = info.length; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
230 if ( length <= 0 ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
231 length = info.intro_length + 2 * info.loop_length; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
232 if ( length <= 0 ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
233 length = audcfg.loop_length * 1000; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
234 else if ( length >= fade_threshold ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
235 length += fade_length; |
|
1687
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
236 tuple_associate_int(ti, FIELD_LENGTH, NULL, length); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
237 } |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
238 return ti; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
239 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
240 |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
241 static char* format_and_free_ti( Tuple* ti, int* length ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
242 { |
|
1510
3a252050736c
replace tuple_formatter_process_string() with tuple_formatter_make_title_string() except that for streamings.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1499
diff
changeset
|
243 char* result = tuple_formatter_make_title_string(ti, get_gentitle_format()); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
244 if ( result ) |
|
1687
d158ce84fda7
Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents:
1510
diff
changeset
|
245 *length = tuple_get_int(ti, FIELD_LENGTH, NULL); |
|
1465
db616ccdd40c
use tuple_free(x) in place of mowgli_object_unref(x)
Giacomo Lozito <james@develia.org>
parents:
1447
diff
changeset
|
246 tuple_free((void *) ti); |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
247 |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
248 return result; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
249 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
250 |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
251 static Tuple *get_song_tuple( gchar *path ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
252 { |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
253 Tuple* result = 0; |
| 341 | 254 File_Handler fh( path ); |
| 255 if ( !fh.load( gme_info_only ) ) | |
| 256 { | |
| 257 track_info_t info; | |
| 258 if ( !log_err( fh.emu->track_info( &info, fh.track ) ) ) | |
| 259 result = get_track_ti( fh.path, info, fh.track ); | |
| 260 } | |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
261 return result; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
262 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
263 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
264 static void get_song_info( char* path, char** title, int* length ) |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
265 { |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
266 *length = -1; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
267 *title = NULL; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
268 |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
269 Tuple* ti = get_song_tuple( path ); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
270 if ( ti ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
271 *title = format_and_free_ti( ti, length ); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
272 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
273 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
274 // Playback |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
275 |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
276 static void* play_loop_track( gpointer arg ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
277 { |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
278 InputPlayback *playback = (InputPlayback *) arg; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
279 g_static_mutex_lock( &playback_mutex ); |
|
1184
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
280 |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
281 int end_delay = 0; |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
282 while ( console_ip_is_going ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
283 { |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
284 // handle pending seek |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
285 long s = pending_seek; |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
286 pending_seek = -1; // TODO: use atomic swap |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
287 if ( s >= 0 ) |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
288 { |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
289 playback->output->flush( s * 1000 ); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
290 emu->seek( s * 1000 ); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
291 } |
| 341 | 292 |
| 293 // fill and play buffer of audio | |
| 294 // TODO: see if larger buffer helps efficiency | |
| 295 int const buf_size = 1024; | |
| 296 Music_Emu::sample_t buf [buf_size]; | |
|
1184
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
297 if ( end_delay ) |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
298 { |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
299 // TODO: remove delay once host doesn't cut the end of track off |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
300 if ( !--end_delay ) |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
301 console_ip_is_going = false; |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
302 memset( buf, 0, sizeof buf ); |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
303 |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
304 } |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
305 else |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
306 { |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
307 emu->play( buf_size, buf ); |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
308 if ( emu->track_ended() ) |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
309 { |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
310 double const seconds = 3; |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
311 end_delay = emu->sample_rate() * (int) (seconds * 2) / buf_size; |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
312 } |
|
6d03915421e2
Possibly fix bug #850. Patch from P2E.
William Pitcock <nenolod@atheme.org>
parents:
1069
diff
changeset
|
313 } |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
314 produce_audio( playback->output->written_time(), |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
315 FMT_S16_NE, 1, sizeof buf, buf, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
316 &console_ip_is_going ); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
317 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
318 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
319 // stop playing |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
320 unload_file(); |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
321 playback->output->close_audio(); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
322 console_ip_is_going = 0; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
323 g_static_mutex_unlock( &playback_mutex ); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
324 return NULL; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
325 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
326 |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
327 static void play_file( InputPlayback *playback ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
328 { |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
329 char* path = playback->filename; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
330 unload_file(); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
331 |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
332 // identify file |
| 341 | 333 File_Handler fh( path ); |
| 334 if ( !fh.type ) | |
| 335 return; | |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
336 |
| 341 | 337 // select sample rate |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
338 long sample_rate = 0; |
| 341 | 339 if ( fh.type == gme_spc_type ) |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
340 sample_rate = 32000; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
341 if ( audcfg.resample ) |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
342 sample_rate = audcfg.resample_rate; |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
343 if ( !sample_rate ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
344 sample_rate = 44100; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
345 |
| 341 | 346 // create emulator and load file |
| 347 if ( fh.load( sample_rate ) ) | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
348 return; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
349 |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
350 // stereo echo depth |
| 341 | 351 gme_set_stereo_depth( fh.emu, 1.0 / 100 * audcfg.echo ); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
352 |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
353 // set equalizer |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
354 if ( audcfg.treble || audcfg.bass ) |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
355 { |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
356 Music_Emu::equalizer_t eq; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
357 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
358 // bass - logarithmic, 2 to 8194 Hz |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
359 double bass = 1.0 - (audcfg.bass / 200.0 + 0.5); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
360 eq.bass = (long) (2.0 + pow( 2.0, bass * 13 )); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
361 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
362 // treble - -50 to 0 to +5 dB |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
363 double treble = audcfg.treble / 100.0; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
364 eq.treble = treble * (treble < 0 ? 50.0 : 5.0); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
365 |
| 341 | 366 fh.emu->set_equalizer(eq); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
367 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
368 |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
369 // get info |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
370 int length = -1; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
371 track_info_t info; |
| 341 | 372 if ( !log_err( fh.emu->track_info( &info, fh.track ) ) ) |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
373 { |
| 341 | 374 if ( fh.type == gme_spc_type && audcfg.ignore_spc_length ) |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
375 info.length = -1; |
|
1418
08a6320f7a2b
console: update to new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
376 Tuple* ti = get_track_ti( fh.path, info, fh.track ); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
377 if ( ti ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
378 { |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
379 char* title = format_and_free_ti( ti, &length ); |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
380 if ( title ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
381 { |
| 341 | 382 console_ip.set_info( title, length, fh.emu->voice_count() * 1000, sample_rate, 2 ); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
383 g_free( title ); |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
384 } |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
385 } |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
386 } |
| 341 | 387 |
| 388 // start track | |
| 389 if ( log_err( fh.emu->start_track( fh.track ) ) ) | |
| 390 return; | |
| 391 log_warning( fh.emu ); | |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
392 if ( !playback->output->open_audio( FMT_S16_NE, sample_rate, 2 ) ) |
| 341 | 393 return; |
| 394 | |
| 395 // set fade time | |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
396 if ( length <= 0 ) |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
397 length = audcfg.loop_length * 1000; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
398 if ( length >= fade_threshold + fade_length ) |
| 648 | 399 length -= fade_length / 2; |
| 341 | 400 fh.emu->set_fade( length, fade_length ); |
| 401 | |
| 402 // take ownership of emu | |
| 403 emu = fh.emu; | |
| 404 fh.emu = 0; | |
| 405 | |
| 406 pending_seek = -1; | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
407 console_ip_is_going = 1; |
|
1348
d427f353e326
console: new threading model
William Pitcock <nenolod@atheme-project.org>
parents:
1185
diff
changeset
|
408 decode_thread = g_thread_self(); |
|
1447
195b5657303e
updated input plugins to use set_pb_ready to signal to the core that they're ready for playback
Giacomo Lozito <james@develia.org>
parents:
1418
diff
changeset
|
409 playback->set_pb_ready(playback); |
|
1348
d427f353e326
console: new threading model
William Pitcock <nenolod@atheme-project.org>
parents:
1185
diff
changeset
|
410 play_loop_track( playback ); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
411 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
412 |
| 559 | 413 static void seek( InputPlayback * data, gint time ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
414 { |
| 341 | 415 // TODO: use thread-safe atomic set |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
416 pending_seek = time; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
417 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
418 |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
419 static void console_stop(InputPlayback *playback) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
420 { |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
421 console_ip_is_going = 0; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
422 if ( decode_thread ) |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
423 { |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
424 g_thread_join( decode_thread ); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
425 decode_thread = NULL; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
426 } |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
427 playback->output->close_audio(); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
428 unload_file(); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
429 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
430 |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
431 static void console_pause(InputPlayback * playback, gshort p) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
432 { |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
433 playback->output->pause(p); |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
434 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
435 |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
436 static int get_time(InputPlayback *playback) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
437 { |
|
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
559
diff
changeset
|
438 return console_ip_is_going ? playback->output->output_time() : -1; |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
439 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
440 |
| 341 | 441 static gint is_our_file_from_vfs( gchar* path, VFSFile* fd ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
442 { |
| 341 | 443 gint result = 0; |
|
385
ac806e416c48
[svn] - some improvements for chiptune expansion efficiency
nenolod
parents:
382
diff
changeset
|
444 File_Handler fh( path, fd, TRUE ); |
| 341 | 445 if ( fh.type ) |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
446 { |
|
1734
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
447 result = 1; |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
448 /* |
| 341 | 449 if ( fh.track_specified || fh.type->track_count == 1 ) |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
450 { |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
451 // don't even need to read file if track is specified or |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
452 // that file format can't have more than one track per file |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
453 result = 1; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
454 } |
| 341 | 455 else if ( !fh.load( gme_info_only ) ) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
456 { |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
457 // format requires reading file info to get track count |
| 341 | 458 if ( fh.emu->track_count() == 1 ) |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
459 { |
| 341 | 460 result = 1; |
| 461 } | |
| 462 else | |
| 463 { | |
| 464 // for multi-track types, add each track to playlist | |
| 465 for (int i = 0; i < fh.emu->track_count(); i++) | |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
466 { |
| 341 | 467 gchar _buf[path_max]; |
| 468 g_snprintf(_buf, path_max, "%s?%d", fh.path, i); | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
469 |
|
363
958855dae693
[svn] - fix other plugins dependant on the playlist framework
nenolod
parents:
355
diff
changeset
|
470 playlist_add_url(playlist_get_active(), _buf); |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
471 } |
| 341 | 472 result = -1; |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
473 } |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
474 } |
|
1734
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
475 */ |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
476 } |
| 382 | 477 else if (fh.track_specified) |
| 478 { | |
| 479 result = 1; | |
| 480 } | |
| 481 | |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
482 return result; |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
483 } |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
484 |
|
1734
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
485 static Tuple *probe_for_tuple(gchar *filename, VFSFile *fd) |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
486 { |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
487 if (!is_our_file_from_vfs(filename, fd)) |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
488 return NULL; |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
489 |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
490 vfs_rewind(fd); |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
491 |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
492 return get_song_tuple(filename); |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
493 } |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
494 |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
495 // Setup |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
496 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
497 static void console_init(void) |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
498 { |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
499 console_cfg_load(); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
500 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
501 |
|
1660
206e7cb5fce7
"about" dialog of console plugin opens now correctly
mf0102 <0102@gmx.at>
parents:
1659
diff
changeset
|
502 void console_aboutbox(void) |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
503 { |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
504 static GtkWidget * aboutbox = NULL; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
505 |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
506 if (!aboutbox) |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
507 { |
|
1677
f6f5603a0954
xmms_show_message() changed to audacious_info_dialog()
Matti Hamalainen <ccr@tnsp.org>
parents:
1660
diff
changeset
|
508 aboutbox = audacious_info_dialog(_("About the Console Music Decoder"), |
| 341 | 509 _("Console music decoder engine based on Game_Music_Emu 0.5.2.\n" |
|
355
92848bda520d
[svn] Move supported formats to plugin info, rename plugin to 'Game console audio module decoder'.
kiyoshi
parents:
341
diff
changeset
|
510 "Supported formats: AY, GBS, GYM, HES, KSS, NSF, NSFE, SAP, SPC, VGM, VGZ\n" |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
511 "Audacious implementation by: William Pitcock <nenolod@nenolod.net>, \n" |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
512 " Shay Green <gblargg@gmail.com>"), |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
513 _("Ok"), |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
514 FALSE, NULL, NULL); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
515 gtk_signal_connect(GTK_OBJECT(aboutbox), "destroy", |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
516 (GCallback)gtk_widget_destroyed, &aboutbox); |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
517 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
518 } |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
519 |
|
1044
b1128efde471
[svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents:
752
diff
changeset
|
520 const gchar *gme_fmts[] = { "ay", "gbs", "gym", "hes", "kss", "nsf", "nsfe", |
| 378 | 521 "sap", "spc", "vgm", "vgz", NULL }; |
| 522 | |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
523 InputPlugin console_ip = |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
524 { |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
525 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
526 NULL, |
| 1185 | 527 (gchar *)"Game console audio module decoder", |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
528 console_init, |
| 1659 | 529 NULL, |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
530 console_aboutbox, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
531 console_cfg_ui, |
|
1611
f49d1284079a
"sorry, unimplemented: non-trivial designated initializers not supported". What a crock of g++.
William Pitcock <nenolod@atheme.org>
parents:
1510
diff
changeset
|
532 FALSE, |
|
f49d1284079a
"sorry, unimplemented: non-trivial designated initializers not supported". What a crock of g++.
William Pitcock <nenolod@atheme.org>
parents:
1510
diff
changeset
|
533 NULL, |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
534 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
535 play_file, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
536 console_stop, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
537 console_pause, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
538 seek, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
539 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
540 get_time, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
541 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
542 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
543 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
544 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
545 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
546 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
547 get_song_info, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
548 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
549 NULL, |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
550 get_song_tuple, |
|
316
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
551 NULL, |
|
fb513e10174e
[svn] - merge libconsole-blargg into mainline libconsole:
nenolod
parents:
12
diff
changeset
|
552 NULL, |
| 378 | 553 is_our_file_from_vfs, |
|
1734
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
554 (gchar **)gme_fmts, |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
555 NULL, |
|
5e47a0c1b969
- updated libconsole plugin subtune code
Giacomo Lozito <james@develia.org>
parents:
1697
diff
changeset
|
556 probe_for_tuple |
|
0
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
557 }; |
|
13389e613d67
[svn] - initial import of audacious-plugins tree (lots to do)
nenolod
parents:
diff
changeset
|
558 |
| 1069 | 559 InputPlugin *console_iplist[] = { &console_ip, NULL }; |
| 560 | |
| 1659 | 561 SIMPLE_INPUT_PLUGIN(console, console_iplist); |
