audio mixer reset() with audio artefact masking

This commit is contained in:
minjaesong
2024-01-12 01:05:52 +09:00
parent b415f30ae5
commit a2f61a2be7
7 changed files with 46 additions and 12 deletions

View File

@@ -463,6 +463,20 @@ object AudioMixer: Disposable {
}
}
fun reset() {
dynamicTracks.forEach { it.stop() }
tracks.filter { it.trackType == TrackType.STATIC_SOURCE }.forEach { it.stop() }
tracks.forEach {
it.processor.purgeBuffer()
}
fadeBus.getFilter<Lowpass>().setCutoff(TerrarumAudioMixerTrack.SAMPLING_RATEF / 2)
// give some time for the cave bus to decay before ramping the volume up
Timer().schedule(object : TimerTask() {
override fun run() {
fadeBus.volume = 1.0
}
}, 500L)
}
override fun dispose() {
processingExecutor.killAll()

View File

@@ -39,6 +39,17 @@ class MixerTrackProcessor(val buffertaille: Int, val rate: Int, val track: Terra
val maxRMS = arrayOf(0.0, 0.0)
val hasClipping = arrayOf(false, false)
internal fun purgeBuffer() {
fout1.forEach { it.fill(0f) }
purgeStreamBuf()
}
private fun purgeStreamBuf() {
track.stop()
streamBuf = null
printdbg("StreamBuf is now null")
}
private var breakBomb = false
private val distFalloff = 1600.0
@@ -70,11 +81,7 @@ class MixerTrackProcessor(val buffertaille: Int, val rate: Int, val track: Terra
}
bytesRead
}, {
track.stop()
this.streamBuf = null
printdbg("StreamBuf is now null")
})
}, { purgeStreamBuf() })
}
override fun run() {
@@ -111,6 +118,7 @@ class MixerTrackProcessor(val buffertaille: Int, val rate: Int, val track: Terra
if (track.trackType == TrackType.DYNAMIC_SOURCE && track.isPlaying) {
if (AudioMixer.actorNowPlaying != null) {
if (track.trackingTarget == null || track.trackingTarget == AudioMixer.actorNowPlaying) {
// "reset" the track
track.volume = track.maxVolume
(track.filters[0] as BinoPan).pan = 0f
(track.filters[1] as Lowpass).setCutoff(SAMPLING_RATE / 2f)
@@ -131,6 +139,12 @@ class MixerTrackProcessor(val buffertaille: Int, val rate: Int, val track: Terra
// printdbg("dist=$distFromActor\tvol=${fullscaleToDecibels(vol)}\tcutoff=${(track.filters[1] as Lowpass).cutoff}")
}
}
else {
// "reset" the track
track.volume = track.maxVolume
(track.filters[0] as BinoPan).pan = 0f
(track.filters[1] as Lowpass).setCutoff(SAMPLING_RATE / 2f)
}
}

View File

@@ -46,8 +46,6 @@ class TerrarumAudioMixerTrack(
var currentTrack: MusicContainer? = null
var nextTrack: MusicContainer? = null
var currentSound: Sound? = null // DYNAMIC_SOURCE only
var volume: TrackVolume = 1.0
get() = field
set(value) {