Vorwort:
Da ich gerne mit Videospiele Musik Dateien hantiere wie z.b. ADX vom Gamecube/Wii, habe ich mir überlegt wie man so etwas in einer anderen Musikdatei machen kann z.B. MP3.
ADX ist ein Audioformat für den Nintendo Gamecube und Wii entwickelt von der Firma CRI Middleware Inc.
Dieses Format hat die besonderheit das in der Header (Dateikopf) sogenannte Loop Points angegeben sind und andere Format spezifische Informationen enthalten z.b. Kodierung, Kanäle ect.
Das Problem ist nur, das solche Audioformate garnicht verbreitet sind bzw ein spezieller Encoder dafür gibt es nur für Entwickler'n der Videospieleindustrie.
Welchen sinn haben Loop Points?
In Videospielen hat es den sinn, das die Musik ständig in schleife abgespielt wird und man hat den eindruck das die Musik eine unendliche länge hat. So bleibt die Audiodatei verhältnismäßig klein und die Musik muss nicht vom neuen beginnen am Anfang. Wenn ihr eure Anwendung Hintergrund Musik ausstatten wollt als besipiel, bleibt die MP3 je nach Bitrate klein und man hat den eindruck als würde die Musik nie enden was im normalfall eine große MP3 Datei wäre. Das könnt ihr auch mit andere beliebige Musik Datei machen die Bass unterstützt.
Folgende Importe werden benötigt:
Haupt Code:
Wie finde ich Loop Points?
Loop Points kann man ganz einfach finden wenn die Musik Inhaltlich nochmal wiederholt wird was auch meisstens der fall ist. Ich benutze Adobe Audition.
Die Loop Points müssen in Samples Zeitformat angegeben werden da diese präziser sind. Es reicht also nicht aus den zeitformat z.B. Start: 00:25, End: 01:22 anzugeben.
Wenn ihr eine MP3 geöffnet habt in Adobe Audition, macht einen rechtsklick auf das Zeitformat und ändert es zu "Samples"
Als nächstes suchen wir die Loop Points. Man benötigt übung und man sollte sich wenn man den Bereich makiert habt anhören ob die Punkte gut gesetzt sind. Man sollte auch rein Zoomen um die Punkte noch genauer zusetzen. Das ganze sieht dann so aus.
Rechts sehen wir dann unsere Loop Points (siehe Beginn & Ende)
Diese tragen wir dann in den Code ein und das sieht dann so aus.
Wenn wir nun unsere Anwendung starten, wird die MP3 am anfang abgespielt bis zum End Point, und wenn die Position am End Point erreicht ist, springt dann zum Start Point und das endlos.
Hinweis: Die Samples dürfen nur einen Maximalen Wert haben von 2147483647 Samples! Das entsrpicht ungefär ~6 Stunden Musik mit normaler Qualität, kann jedoch abweichen wenn man ein anderes Format benutzt.
Viel Spaß damit
Da ich gerne mit Videospiele Musik Dateien hantiere wie z.b. ADX vom Gamecube/Wii, habe ich mir überlegt wie man so etwas in einer anderen Musikdatei machen kann z.B. MP3.
ADX ist ein Audioformat für den Nintendo Gamecube und Wii entwickelt von der Firma CRI Middleware Inc.
Dieses Format hat die besonderheit das in der Header (Dateikopf) sogenannte Loop Points angegeben sind und andere Format spezifische Informationen enthalten z.b. Kodierung, Kanäle ect.
Das Problem ist nur, das solche Audioformate garnicht verbreitet sind bzw ein spezieller Encoder dafür gibt es nur für Entwickler'n der Videospieleindustrie.
Welchen sinn haben Loop Points?
In Videospielen hat es den sinn, das die Musik ständig in schleife abgespielt wird und man hat den eindruck das die Musik eine unendliche länge hat. So bleibt die Audiodatei verhältnismäßig klein und die Musik muss nicht vom neuen beginnen am Anfang. Wenn ihr eure Anwendung Hintergrund Musik ausstatten wollt als besipiel, bleibt die MP3 je nach Bitrate klein und man hat den eindruck als würde die Musik nie enden was im normalfall eine große MP3 Datei wäre. Das könnt ihr auch mit andere beliebige Musik Datei machen die Bass unterstützt.
Folgende Importe werden benötigt:
Haupt Code:
VB.NET-Quellcode
- Public Class Form1
- Private _loopSync As Integer = 0
- Private _loopSyncCallback As SYNCPROC
- Public stream As Integer = 0
- 'Zeitformat Samples zu Bytes umrechnen
- Public Function Samples2Bytes(ByRef Samples As Int32)
- Dim out As Int32
- out = Samples * 4
- Return out
- End Function
- Private Sub LoopSync(ByVal syncHandle As Integer, ByVal channel As Integer, ByVal data As Integer, ByVal user As IntPtr)
- Bass.BASS_ChannelSetPosition(channel, user.ToInt64())
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- BassNet.Registration("XXXXXXXX@XXXXXXXXX", "XXXXXXXXXXXXXX") 'Registration
- BassNet.ShowSplash(Me, 1, 0, 0) 'Splash Screen verstecken
- Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
- stream = Bass.BASS_StreamCreateFile(Application.StartupPath & "\test.mp3", 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN)
- 'Loop Point
- Dim LPS As Int32 = Samples2Bytes(00000000) 'Start Loop Point (Samples)
- Dim LPE As Int32 = Samples2Bytes(00000000) 'End Loop Point (Samples)
- _loopSyncCallback = New SYNCPROC(AddressOf LoopSync)
- _loopSync = Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_POS Or BASSSync.BASS_SYNC_MIXTIME, LPE, _loopSyncCallback, New IntPtr(LPS))
- 'Play MP3
- Bass.BASS_ChannelPlay(stream, False)
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Bass.BASS_Stop()
- End
- End Sub
- End Class
Wie finde ich Loop Points?
Loop Points kann man ganz einfach finden wenn die Musik Inhaltlich nochmal wiederholt wird was auch meisstens der fall ist. Ich benutze Adobe Audition.
Die Loop Points müssen in Samples Zeitformat angegeben werden da diese präziser sind. Es reicht also nicht aus den zeitformat z.B. Start: 00:25, End: 01:22 anzugeben.
Wenn ihr eine MP3 geöffnet habt in Adobe Audition, macht einen rechtsklick auf das Zeitformat und ändert es zu "Samples"
Als nächstes suchen wir die Loop Points. Man benötigt übung und man sollte sich wenn man den Bereich makiert habt anhören ob die Punkte gut gesetzt sind. Man sollte auch rein Zoomen um die Punkte noch genauer zusetzen. Das ganze sieht dann so aus.
Rechts sehen wir dann unsere Loop Points (siehe Beginn & Ende)
Diese tragen wir dann in den Code ein und das sieht dann so aus.
Wenn wir nun unsere Anwendung starten, wird die MP3 am anfang abgespielt bis zum End Point, und wenn die Position am End Point erreicht ist, springt dann zum Start Point und das endlos.
Hinweis: Die Samples dürfen nur einen Maximalen Wert haben von 2147483647 Samples! Das entsrpicht ungefär ~6 Stunden Musik mit normaler Qualität, kann jedoch abweichen wenn man ein anderes Format benutzt.
Viel Spaß damit
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MichaSDL0403“ ()