Recherche avancée

Médias (91)

Autres articles (69)

  • La file d’attente de SPIPmotion

    28 novembre 2010, par

    Une file d’attente stockée dans la base de donnée
    Lors de son installation, SPIPmotion crée une nouvelle table dans la base de donnée intitulée spip_spipmotion_attentes.
    Cette nouvelle table est constituée des champs suivants : id_spipmotion_attente, l’identifiant numérique unique de la tâche à traiter ; id_document, l’identifiant numérique du document original à encoder ; id_objet l’identifiant unique de l’objet auquel le document encodé devra être attaché automatiquement ; objet, le type d’objet auquel (...)

  • Des sites réalisés avec MediaSPIP

    2 mai 2011, par

    Cette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
    Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page.

  • Support audio et vidéo HTML5

    10 avril 2011

    MediaSPIP utilise les balises HTML5 video et audio pour la lecture de documents multimedia en profitant des dernières innovations du W3C supportées par les navigateurs modernes.
    Pour les navigateurs plus anciens, le lecteur flash Flowplayer est utilisé.
    Le lecteur HTML5 utilisé a été spécifiquement créé pour MediaSPIP : il est complètement modifiable graphiquement pour correspondre à un thème choisi.
    Ces technologies permettent de distribuer vidéo et son à la fois sur des ordinateurs conventionnels (...)

Sur d’autres sites (6989)

  • merge (video and sound) with (background music)

    27 novembre 2016, par Nir di

    i have video file vid.mpg that contain video and audio(speaking) and audio file aud.wav that contain background music.

    now, i want to merge them together.

    here is the command that i use :

    ffmpeg -i vid.mpg -i aud.mp3 -c:v copy  -filter_complex "[0:a]aformat = fltp:44100:stereo,apad[0a];[1]aformat=fltp:44100:stereo,volume=0.1[1a];[0a][1a]amerge[a]" -map 0:v -map "[a]" -ac 2 -t 0 out.mpg

    and this is the error that i get as response :

    [Parsed_amerge_4 @ 00000000003a36e0] No channel layout for input 1
    [Parsed_amerge_4 @ 00000000003a36e0] Input channel layouts overlap: output layou
    t will be determined by the number of distinct input channels
    [mpeg @ 000000000289a4e0] VBV buffer size not set, using default size of 130KB
    If you want the mpeg file to be compliant to some specification
    Like DVD, VCD or others, make sure you set the correct buffer size

    in addition i add the full log :

    C:\bina\ffmpeg\bin>ffmpeg -i vid.mpg -i
    aud.mp3 -c:v copy  -filter_complex "[1:a]aform
    at = fltp:44100:stereo,apad[0a];[1]aformat=fltp:44100:stereo,volume=0.1[1a];[0a]
    [1a]amerge[a]" -map 0:v -map "[a]" -ac 2 -t 0 out.mpg
    ffmpeg version N-78949-g6f5048f Copyright (c) 2000-2016 the FFmpeg developers
     built with gcc 5.3.0 (GCC)
     configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
    isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
    le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
    enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-l
    ibilbc --enable-libmodplug --enable-libmfx --enable-libmp3lame --enable-libopenc
    ore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --ena
    ble-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable
    -libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --ena
    ble-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx
    264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable
    -lzma --enable-decklink --enable-zlib
     libavutil      55. 19.100 / 55. 19.100
     libavcodec     57. 27.101 / 57. 27.101
     libavformat    57. 28.100 / 57. 28.100
     libavdevice    57.  0.101 / 57.  0.101
     libavfilter     6. 39.100 /  6. 39.100
     libswscale      4.  0.100 /  4.  0.100
     libswresample   2.  0.101 /  2.  0.101
     libpostproc    54.  0.100 / 54.  0.100
    Input #0, mpeg, from 'vid.mpg':
     Duration: 00:00:33.62, start: 0.529978, bitrate: 22407 kb/s
       Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p(tv), 1920x1080 [SAR 1:
    1 DAR 16:9], max. 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
       Stream #0:1[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16p, 192 kb/s
    [mp3 @ 00000000003e3c20] Skipping 0 bytes of junk at 253.
    Input #1, mp3, from 'aud.mp3':
     Metadata:
       encoder         : Lavf57.28.100
     Duration: 00:01:03.03, start: 0.025057, bitrate: 128 kb/s
       Stream #1:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s
       Metadata:
         encoder         : Lavc57.27
    File 'out.mpg' already exists. Overwrite
    ? [y/N] y
    [Parsed_amerge_4 @ 00000000003a36e0] No channel layout for input 1
    [Parsed_amerge_4 @ 00000000003a36e0] Input channel layouts overlap: output layou
    t will be determined by the number of distinct input channels
    [mpeg @ 000000000289a4e0] VBV buffer size not set, using default size of 130KB
    If you want the mpeg file to be compliant to some specification
    Like DVD, VCD or others, make sure you set the correct buffer size
    Output #0, mpeg, to 'out.mpg':
     Metadata:
       encoder         : Lavf57.28.100
       Stream #0:0: Video: mpeg2video, yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-3
    1, max. 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc
       Stream #0:1: Audio: mp2, 44100 Hz, stereo, s16, 384 kb/s (default)
       Metadata:
         encoder         : Lavc57.27.101 mp2
    Stream mapping:
     Stream #1:0 (mp3) -> aformat
     Stream #1:0 (mp3) -> aformat
     Stream #0:0 -> #0:0 (copy)
     amerge -> Stream #0:1 (mp2)
    Press [q] to stop, [?] for help
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=234676 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=234676 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=236705 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=236705 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=238746 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=238746 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=240787 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=240787 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=242828 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=242828 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=244869 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=244869 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=246910 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=246910 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=248951 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=248951 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=250992 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=250992 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=253033 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=253033 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=255074 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=255074 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=257115 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=257115 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=259156 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=259156 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=261197 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=261197 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=263238 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=263238 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=265279 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=265279 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=267320 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=267320 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=269361 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=269361 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=271402 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=271402 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=273443 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=273443 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=275484 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=275484 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=277525 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=277525 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=279566 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=279566 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=281607 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=281607 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=283648 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=283648 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=285689 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=285689 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=287730 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=287730 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=289771 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=289771 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=291812 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=291812 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=293853 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=293853 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=295894 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=295894 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=297935 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=297935 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=299976 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=299976 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=302017 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=302017 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=304058 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=304058 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=306099 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=306099 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=308140 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=308140 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=310181 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=310181 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=312222 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=312222 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=314263 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=314263 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=316304 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=316304 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=318345 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=318345 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=320386 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=320386 size=322616
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=322427 size=322616
    [mpeg @ 000000000289a4e0] packet too large, ignoring buffer limits to mux it
    [mpeg @ 000000000289a4e0] buffer underflow st=0 bufi=322427 size=322616
    frame=    1 fps=0.0 q=-1.0 Lsize=     318kB time=00:00:00.00 bitrate=N/A speed=
     0x
    video:315kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing o
    verhead: 0.934858%

    C:\bina\ffmpeg\bin>ffmpeg -i vid.mpg -i
    aud.mp3 -c:v copy  -filter_complex "[0:a]aform
    at = fltp:44100:stereo,apad[0a];[1]aformat=fltp:44100:stereo,volume=0.1[1a];[0a]
    [1a]amerge[a]" -map 0:v -map "[a]" -ac 2 -t 0 out.mpg

    what am i doing wrong ? and how can i solve it ?

    please help.

  • Adding AY Files To The Game Music Website

    1er décembre 2013, par Multimedia Mike — General

    For the first time since I launched the site in the summer of last year, I finally added support for new systems for my Game Music Appreciation site : A set of chiptune music files which bear the file extension AY. These files come from games that were on the ZX Spectrum and Amstrad CPC computer systems.


    ZX Spectrum Amstrad CPC

    Right now, there are over 650 ZX Spectrum games in the site while there are all of 20 Amstrad CPC games. The latter system seems a bit short-changed, but I read that a lot of Amstrad games were straight ports from the Spectrum anyway since the systems possessed assorted similarities. This might help explain the discrepancy.

    Technically
    The AY corpus has always been low hanging fruit due to the fact that the site already supports the format courtesy of the game-music-emu backend. The thing that blocked me was that I didn’t know much about these systems. I knew that there were 2 systems (and possibly more) that shared the same chiptune format. Apparently, these machines were big in Europe (I was only vaguely aware of them before I started this project).

    Both the Spectrum and the Amstrad used Zilog Z-80 CPUs for computing and created music using a General Instruments synthesizer chip designated AY-3-8912, hence the chiptune file extension AY. This has 3 channels similar to the C64 SID chip. Additionally, there’s a fourth channel that game music emu calls “beeper” (and which Wikipedia describes as “one channel with 10 octaves”). Per my listening, it seems similar to the old PC speaker/honker. The metadata for a lot of the songs will specify either (AY) or (Beeper).

    Wrangling Metadata
    Large collections of AY files are easy to find ; as is typical for pure chiptunes, the files are incredibly small.

    As usual, the hardest part of the whole process was munging metadata. There seems to be 2 slightly different conventions for AY metadata, likely from 2 different people doing the bulk of the work and releasing the fruits of their labor into the wild. After I recognized the subtle differences between the 2 formats, it was straightforward to craft a tool to perform most of the work, leaving only a minimum of cleanup effort required afterwards.

    (As an aside, I think this process is called extract – transform – load, or ETL. Sounds fancy and complicated, yet it’s technically one of the first computer programming tasks I was ever paid to perform.)

    Collateral Damage
    While pushing this feature, I managed to break the site’s search engine. The search solution I developed was always sketchy (involving compiling a C program as a static binary CGI script and trusting it to run on the server). I will probably need to find a better approach, preferably sooner than later.

  • Managing Music Playback Channels

    30 juin 2013, par Multimedia Mike — General

    My Game Music Appreciation site allows users to interact with old video game music by toggling various channels, as long as the underlying synthesizer engine supports it.


    5 NES voices

    Users often find their way to the Nintendo DS section pretty quickly. This is when they notice an obnoxious quirk with the channel toggling feature : specifically, one channel doesn’t seem to map to a particular instrument or track.

    When it comes to computer music playback methodologies, I have long observed that there are 2 general strategies : Fixed channel and dynamic channel allocation.

    Fixed Channel Approach
    One of my primary sources of computer-based entertainment used to be watching music. Sure I listened to it as well. But for things like Amiga MOD files and related tracker formats, there was a rich ecosystem of fun music playback programs that visualized the music. There exist music visualization modes in various music players these days (such as iTunes and Windows Media Player), but those largely just show you a single wave form. These files were real time syntheses based on multiple audio channels and usually showed some form of analysis for each channel. My personal favorite was Cubic Player :


    Open Cubic Player -- oscilloscopes

    Most of these players supported the concept of masking individual channels. In doing so, the user could isolate, study, and enjoy different components of the song. For many 4-channel Amiga MOD files, I observed that the common arrangement was to use the 4 channels for beat (percussion track), bass line, chords, and melody. Thus, it was easy to just listen to, e.g., the bass line in isolation.

    MODs and similar formats specified precisely which digital audio sample to play at what time and on which specific audio channel. To view the internals of one of these formats, one gets the impression that they contain an extremely computer-centric view of music.

    Dynamic Channel Allocation Algorithm
    MODs et al. enjoyed a lot of popularity, but the standard for computer music is MIDI. While MOD and friends took a computer-centric view of music, MIDI takes, well, a music-centric view of music.

    There are MIDI visualization programs as well. The one that came with my Gravis Ultrasound was called PLAYMIDI.EXE. It looked like this…


    Gravis Ultrasound PLAYMIDI.EXE application

    … and it confused me. There are 16 distinct channels being visualized but some channels are shown playing multiple notes. When I dug into the technical details, I learned that MIDI just specifies what notes need to be played, at what times and frequencies and using which instrument samples, and it was the MIDI playback program’s job to make it happen.

    Thus, if a MIDI file specifies that track 1 should play a C major chord consisting of notes C, E, and G, it would transmit events “key-on C ; delta time 0 ; key-on E ; delta time 0 ; key-on G ; delta time … ; [other commands]“. If the playback program has access to multiple channels (say, up to 32, in the case of the GUS), the intuitive approach would be to maintain a pool of all available channels. Then, when it’s time to process the “key-on C” event, fetch the first available channel from the pool, mark it as in-use, play C on the channel, and return that channel to the pool when either the sample runs its course or the corresponding “key-off C” event is encountered in the MIDI command stream.

    About That Game Music
    Circling back around to my game music website, numerous supported systems use the fixed channel approach for playback while others use dynamic channel allocation approach, including evey Nintendo DS game I have so far analyzed.

    Which approach is better ? As in many technical matters, there are trade-offs either way. For many systems, the fixed channel approach is necessary because for many older audio synthesis systems, different channels had very specific purposes. The 8-bit NES had 5 channels : 2 square wave generators (used musically for melody/treble), 1 triangle wave generator (usually used for bass line), a noise generator (subverted for all manner of percussive sounds), and a limited digital channel (was sometimes assigned richer percussive sounds). Dynamic channel allocation wouldn’t work here.

    But the dynamic approach works great on hardware with 16 digital channels available like, for example, the Nintendo DS. Digital channels are very general-purpose. What about the SNES, with its 8 digital channels ? Either approach could work. In practice, most games used a fixed channel approach : Games might use 4-6 channels for music while reserving the remainder for various in-game sound effects. Some notable exceptions to this pattern were David Wise’s compositions for Rare’s SNES games (think Battletoads and the various Donkey Kong Country titles). These clearly use some dynamic channel approach since masking all but one channel will give you a variety of instrument sounds.

    Epilogue
    There ! That took a long time to explain but I find it fascinating for some reason. I need to distill it down to far fewer words because I want to make it a FAQ on my website for “Why can’t I isolate specific tracks for Nintendo DS games ?”

    Actually, perhaps I should remove the ability to toggle Nintendo DS channels in the first place. Here’s a funny tale of needless work : I found the Vio2sf engine for synthesizing Nintendo DS music and incorporated it into the program. It didn’t support toggling of individual channels so I figured out a way to add that feature to the engine. And then I noticed that most Nintendo DS games render that feature moot. After I released the webapp, I learned that I was out of date on the Vio2sf engine. The final insult was that the latest version already supports channel toggling. So I did the work for nothing. But then again, since I want to remove that feature from the UI, doubly so.