Author Topic: No audio for MIDI on Android  (Read 59 times)

d99fish

  • Posts: 2
No audio for MIDI on Android
« on: 27 Jan '25 - 09:11 »
I am trying to play back a midifile on android with a soundfont. But I get no audio out. I then tried to make an easy usecase work, where I would just playback a note manually, without reading from the mid or sf2 files. But there is still no audio out.

here is the code that is used to playback the note:
Code: [Select]
        // Initialize BASS
        if (!BASS.BASS_Init(-1, 44100, 0)) {
            Log.e("BASS", "BASS initialization failed: " + BASS.BASS_ErrorGetCode());
        } else {
            Log.d("BASS", "BASS init was ok");
        }

        int midiStream = BASSMIDI.BASS_MIDI_StreamCreate(16, BASS.BASS_SAMPLE_LOOP, 44100);
        if (midiStream == 0) {
            Log.e("BASS", "Failed to create MIDI stream: " + BASS.BASS_ErrorGetCode());
            return;
        }

        if (!BASS.BASS_ChannelPlay(midiStream, false)) {
            Log.e("BASS", "Failed to play MIDI stream: " + BASS.BASS_ErrorGetCode());
            return;
        }

        // Play a single note
        int channel = 0;
        int note = 60;
        int velocity = 100;
        if (!BASSMIDI.BASS_MIDI_StreamEvent(midiStream, channel, MIDI_EVENT_NOTE, (velocity << 8) | note)) {
            Log.e("BASS", "Failed to send Note On: " + BASS.BASS_ErrorGetCode());
            return;
        }
        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        int volume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        if (volume == 0) {
            Log.e("Audio", "Device volume is muted. Increase volume to hear audio.");
            return;
        }

        Log.d("BASS", "AudioTrack state: " + BASS.BASS_ChannelIsActive(midiStream));

        BASS.BASS_SetVolume(1.0f); // Set BASS volume to maximum
        long bytesPlayed = BASS.BASS_ChannelGetPosition(midiStream, BASS.BASS_POS_BYTE);
        Log.d("BASS", "Starting Bytes played: " + bytesPlayed);

        // Stop note after 10 seconds
        new Handler(audioThread.getLooper()).postDelayed(() -> {
            Log.d("BASS", "Bytes played: " + BASS.BASS_ChannelGetPosition(midiStream, BASS.BASS_POS_BYTE));
            if (!BASSMIDI.BASS_MIDI_StreamEvent(midiStream, channel, MIDI_EVENT_NOTE, (0 << 8) | note)) {
                Log.e("BASS", "Failed to send Note Off: " + BASS.BASS_ErrorGetCode());
            }
            BASS.BASS_StreamFree(midiStream);
        }, 10000);

        new Handler(audioThread.getLooper()).postDelayed(() -> {
            Log.d("BASS", "AudioTrack state: " + BASS.BASS_ChannelIsActive(midiStream));
            Log.d("BASS", "Bytes played: " + BASS.BASS_ChannelGetPosition(midiStream, BASS.BASS_POS_BYTE));
        }, 1000);

d99fish

  • Posts: 2
Re: No audio for MIDI on Android
« Reply #1 on: 27 Jan '25 - 09:12 »
Here is the logfile that is generated when running the code above:
Code: [Select]
2025-01-27 10:06:29.299  4760-5238  AAudio                  com.myapp                I  AAudioStreamBuilder_openStream() called ----------------------------------------
2025-01-27 10:06:29.299  4760-5238  AudioStreamBuilder      com.myapp                I  rate   =      0, channels  = 0, format   = 0, sharing = SH, dir = OUTPUT
2025-01-27 10:06:29.299  4760-5238  AudioStreamBuilder      com.myapp                I  device =      0, sessionId = 0, perfMode = 12, callback: ON with frames = 0
2025-01-27 10:06:29.299  4760-5238  AudioStreamBuilder      com.myapp                I  usage  =      1, contentType = 0, inputPreset = 0, allowedCapturePolicy = 0
2025-01-27 10:06:29.299  4760-5238  AudioStreamBuilder      com.myapp                I  privacy sensitive = false
2025-01-27 10:06:29.299  4760-5238  AudioStreamBuilder      com.myapp                I  opPackageName = (null)
2025-01-27 10:06:29.299  4760-5238  AudioStreamBuilder      com.myapp                I  attributionTag = (null)
2025-01-27 10:06:29.299  4760-5238  AudioStreamBuilder      com.myapp                D  build() MMAP not used because sessionId specified.
2025-01-27 10:06:29.299  4760-5238  etree.salsamem          com.myapp                D  PlayerBase::PlayerBase()
2025-01-27 10:06:29.300  4760-5238  AudioStreamTrack        com.myapp                D  open(), request notificationFrames = -8, frameCount = 0
2025-01-27 10:06:29.300  4760-5238  AudioTrack              com.myapp                D  set(sessionId=0)
2025-01-27 10:06:29.300  4760-5238  AudioTrack              com.myapp                D  set(): streamType -1, sampleRate 0, format 0x5, channelMask 0x3, frameCount 0, flags #4, notificationFrames -8, sessionId 0, transferType 1, uid -1, pid -1
2025-01-27 10:06:29.309  4760-5238  AudioTrack              com.myapp                I  createTrack_l(0): AUDIO_OUTPUT_FLAG_FAST successful; frameCount 0 -> 1536
2025-01-27 10:06:29.310  4760-5238  AudioTrack              com.myapp                D  isWhiteListPackage() Uid 10486, package name com.myapp
2025-01-27 10:06:29.311  4760-5238  AudioTrack              com.myapp                I  AudioTrack::setVolume L:1.000000 R:1.000000 and the pakage is com.myapp
2025-01-27 10:06:29.311  4760-5238  AAudioStream            com.myapp                D  setState(s#1) from 0 to 2
2025-01-27 10:06:29.312  4760-5238  AAudio                  com.myapp                I  AAudioStreamBuilder_openStream() returns 0 = AAUDIO_OK for s#1 ----------------
2025-01-27 10:06:29.312  4760-5238  AAudio                  com.myapp                D  AAudioStream_close(s#1) called ---------------
2025-01-27 10:06:29.312  4760-5238  AAudioStream            com.myapp                D  setState(s#1) from 2 to 11
2025-01-27 10:06:29.312  4760-5238  AudioTrack              com.myapp                D  stop(sessionID=3009)
2025-01-27 10:06:29.312  4760-5238  AudioTrack              com.myapp                D  stop(136): prior state:STATE_STOPPED
2025-01-27 10:06:29.312  4760-5238  AudioTrack              com.myapp                D  ~AudioTrack(sessionID=3009)
2025-01-27 10:06:29.312  4760-5238  AudioTrack              com.myapp                D  stop(sessionID=3009)
2025-01-27 10:06:29.312  4760-5238  AudioTrack              com.myapp                D  stop(136): prior state:STATE_STOPPED
2025-01-27 10:06:29.312  4760-5238  AAudioStream            com.myapp                D  setState(s#1) from 11 to 12
2025-01-27 10:06:29.312  4760-5238  AAudioStream            com.myapp                D  ~AudioStream(s#1) mPlayerBase strongCount = 2
2025-01-27 10:06:29.312  4760-5238  AAudio                  com.myapp                D  AAudioStream_close(s#1) returned 0 ---------
2025-01-27 10:06:29.312  4760-5238  AAudio                  com.myapp                I  AAudioStreamBuilder_openStream() called ----------------------------------------
2025-01-27 10:06:29.312  4760-5238  AudioStreamBuilder      com.myapp                I  rate   =      0, channels  = 0, format   = 0, sharing = SH, dir = OUTPUT
2025-01-27 10:06:29.312  4760-5238  AudioStreamBuilder      com.myapp                I  device =      0, sessionId = 0, perfMode = 12, callback: ON with frames = 576
2025-01-27 10:06:29.312  4760-5238  AudioStreamBuilder      com.myapp                I  usage  =      1, contentType = 0, inputPreset = 0, allowedCapturePolicy = 0
2025-01-27 10:06:29.312  4760-5238  AudioStreamBuilder      com.myapp                I  privacy sensitive = false
2025-01-27 10:06:29.312  4760-5238  AudioStreamBuilder      com.myapp                I  opPackageName = (null)
2025-01-27 10:06:29.312  4760-5238  AudioStreamBuilder      com.myapp                I  attributionTag = (null)
2025-01-27 10:06:29.312  4760-5238  AudioStreamBuilder      com.myapp                D  build() MMAP not used because sessionId specified.
2025-01-27 10:06:29.312  4760-5238  etree.salsamem          com.myapp                D  PlayerBase::PlayerBase()
2025-01-27 10:06:29.313  4760-5238  AudioStreamTrack        com.myapp                D  open(), request notificationFrames = 0, frameCount = 2304
2025-01-27 10:06:29.313  4760-5238  AudioTrack              com.myapp                D  set(sessionId=0)
2025-01-27 10:06:29.313  4760-5238  AudioTrack              com.myapp                D  set(): streamType -1, sampleRate 0, format 0x5, channelMask 0x3, frameCount 2304, flags #4, notificationFrames 0, sessionId 0, transferType 1, uid -1, pid -1
2025-01-27 10:06:29.319  4760-5238  AudioTrack              com.myapp                I  createTrack_l(136): AUDIO_OUTPUT_FLAG_FAST successful; frameCount 2304 -> 2304
2025-01-27 10:06:29.320  4760-5238  AudioTrack              com.myapp                D  isWhiteListPackage() Uid 10486, package name com.myapp
2025-01-27 10:06:29.320  4760-5238  AudioTrack              com.myapp                I  AudioTrack::setVolume L:1.000000 R:1.000000 and the pakage is com.myapp
2025-01-27 10:06:29.320  4760-5238  AAudioStream            com.myapp                D  setState(s#2) from 0 to 2
2025-01-27 10:06:29.321  4760-5238  AAudio                  com.myapp                I  AAudioStreamBuilder_openStream() returns 0 = AAUDIO_OK for s#2 ----------------
2025-01-27 10:06:29.322  4760-5238  BASS                    com.myapp                D  BASS init was ok
2025-01-27 10:06:29.325  4760-5238  AAudio                  com.myapp                D  AAudioStream_requestStart(s#2) called --------------
2025-01-27 10:06:29.325  4760-5238  AAudioStream            com.myapp                D  setState(s#2) from 2 to 3
2025-01-27 10:06:29.338  4760-5238  AAudio                  com.myapp                D  AAudioStream_requestStart(s#2) returned 0 ---------
2025-01-27 10:06:29.338  4760-4806  AudioStreamLegacy       com.myapp                D  onAudioDeviceUpdate(deviceId = 3)
2025-01-27 10:06:29.341  4760-5238  BASS                    com.myapp                D  AudioTrack state: 1
2025-01-27 10:06:29.341  4760-5238  BASS                    com.myapp                D  Starting Bytes played: 0
2025-01-27 10:06:29.425  4760-5240  AAudioStream            com.myapp                D  setState(s#2) from 3 to 4
2025-01-27 10:06:30.343  4760-5238  BASS                    com.myapp                D  AudioTrack state: 1
2025-01-27 10:06:30.343  4760-5238  BASS                    com.myapp                D  Bytes played: 168368
2025-01-27 10:06:30.381  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 1 Seconds
2025-01-27 10:06:31.389  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 2 Seconds
2025-01-27 10:06:32.397  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 3 Seconds
2025-01-27 10:06:33.405  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 4 Seconds
2025-01-27 10:06:34.413  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 5 Seconds
2025-01-27 10:06:35.421  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 6 Seconds
2025-01-27 10:06:36.429  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 7 Seconds
2025-01-27 10:06:37.437  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 8 Seconds
2025-01-27 10:06:38.445  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 9 Seconds
2025-01-27 10:06:39.352  4760-5238  BASS                    com.myapp                D  Bytes played: 1757456
2025-01-27 10:06:39.453  4760-5240  AudioTrack              com.myapp                I  isLongTimeZeroData zoer date time 10 Seconds
2025-01-27 10:06:40.357  4760-5241  AAudio                  com.myapp                D  AAudioStream_requestStop(s#2) called
2025-01-27 10:06:40.357  4760-5241  AAudioStream            com.myapp                D  setState(s#2) from 4 to 9
2025-01-27 10:06:40.357  4760-5241  AudioTrack              com.myapp                D  stop(sessionID=3017)
2025-01-27 10:06:40.357  4760-5241  AudioTrack              com.myapp                D  stop(137): prior state:STATE_ACTIVE
2025-01-27 10:06:40.357  4760-5241  AudioTrack              com.myapp                D  stop(137): called with 527232 frames delivered
2025-01-27 10:08:26.705  4760-5251  etree.salsamem          com.myapp                D  PlayerBase::~PlayerBase()

Ian @ un4seen

  • Administrator
  • Posts: 26254
Re: No audio for MIDI on Android
« Reply #2 on: 27 Jan '25 - 15:44 »
That code doesn't appear to be telling BASSMIDI what soundfont to use, eg. with BASS_MIDI_FontInit and BASS_MIDI_StreamSetFonts. Are you doing that elsewhere? If not, adding those calls will hopefully fix the problem. An example of what those calls look like can be found in the MIDITEST example that's included in the BASSMIDI package.