Welcome to AudioCue-maven Discussions! #2
philfrei
announced in
Announcements
Replies: 3 comments 2 replies
-
|
Good mornig. I am starting to develope a Looper/Groover app. But I do not know how to get an output stream from the AudioMixer which is playing back several concurrent AudioCues in order to write a file. Can Anyone help me? Thanks |
Beta Was this translation helpful? Give feedback.
1 reply
-
|
Hi, thanks for your quick response.
I have already done It. I downloaded all the files to my project and
modifying them acording to my needs. I am making a looper/groover for live
playing. That is, playing parts of a song as loops and add some sounds from
a matrix of pads (percussions, drums, FX,s) and from my pedal board (Helix
Line 6). The final song is properly saved. Every thing controlled by MIDI
pedal board switches.
I let you know if I get good results.
Regards Quique.
El sáb, 11 oct 2025, 20:19, Phil Freihofner ***@***.***>
escribió:
… Yes, the only output at this point in AudioMixer goes directly to the
SourceDataLine. I've been meaning to create some sort of auxiliary
output, but haven't managed to find time. Having this would allow several
useful things, not just saving to file, but also providing a real-time RMS
volume tracker (for someone wishing to create a control that displays the
volume).
The key would be accessing the audioBytes variable in the run() method of
the subclass AudioMixerPlayer in AudioMixer
<https://github.com/philfrei/AudioCue-maven/blob/main/src/main/java/com/adonax/audiocue/AudioMixer.java>.
My first guess would be to use a Listener type of pattern. If there is a
listener registered, audioBytes could be saved to that listening object.
Thinking this through--the second goal of having an RMS listener would
actually use readBuffer instead of audioBytes, as the former has
normalized PCM. So, maybe implement two listeners, one for PCM and one for
the bytes formatted for playback.
—
Reply to this email directly, view it on GitHub
<#2 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BYTJSUKLVVD3BTSOVT4GA3D3XFC27AVCNFSM6AAAAACI5BDEDGVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTINRVGU2DSNI>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
1 reply
-
|
Hi Phil, the first approach has been include a boolean in the run method of
the subclass AudioMixerPlayer
if (mixerRecording)
{ recordBytes.write(audioBytes, 0, sdlByteBufferSize); }
So, the worst case is when you push Record or Stop Recording and readBuffer
is almost full, so there is information we do not want or missing. Now I am
making time measures in order to cut head and adding tail out of the loop
to remain this simple method. What do you think?
I will keep an eye on all your projects and progresses. Thanks.
El dom, 12 oct 2025 a las 4:04, Phil Freihofner ***@***.***>)
escribió:
… Nice! Did you follow my proposed plan or come up with a different way to
implement your goal? I'd be interested in learning more, and in getting
something into the AudioCue library or the supporting demo library. Also,
your project sounds very interesting. I've written some code that handles
events and which I use to score pieces to be mixed and played in real time.
I know this is an ambitious task. I haven't published it yet, as there are
issues with it. The code includes an FM synthesizer that implements patches
I originally came up with on the Yamaha DX-7. Part of the goal: a
music/sound player that could accompany a game, responding to game state in
real time, and could (via listeners) send control signals back to drive
graphical or other game state events.
—
Reply to this email directly, view it on GitHub
<#2 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/BYTJSUOGS64GMOWFULV2I3L3XGZJ3AVCNFSM6AAAAACI5BDEDGVHI2DSMVQWIX3LMV43URDJONRXK43TNFXW4Q3PNVWWK3TUHMYTINRVGY3DIMY>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
👋 Welcome!
We’re using Discussions as a place to connect with other members of our community. We hope that you:
build together 💪.
To get started, comment below with an introduction of yourself and tell us about what you do with this community.
Beta Was this translation helpful? Give feedback.
All reactions