mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
fix: getFreeTrack() would return a track it just returned when the timing coincides
This commit is contained in:
@@ -124,7 +124,7 @@ class AudioMixer : Disposable {
|
||||
*/
|
||||
fun getFreeTrackNoMatterWhat(): TerrarumAudioMixerTrack {
|
||||
synchronized(this) {
|
||||
return getFreeTrack() ?: dynamicTracks.minBy { it.playStartedTime }
|
||||
return getFreeTrack() ?: dynamicTracks.minBy { it.playStartedTime }.also { it.checkedOutTime = System.nanoTime() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,7 +134,10 @@ class AudioMixer : Disposable {
|
||||
fun getFreeTrack(): TerrarumAudioMixerTrack? {
|
||||
synchronized(this) {
|
||||
return dynamicTracks.filter { it.trackingTarget == null && !it.isPlaying }
|
||||
.minByOrNull { it.playStartedTime }
|
||||
.minByOrNull { maxOf(it.checkedOutTime, it.playStartedTime) }
|
||||
.also {
|
||||
it?.checkedOutTime = System.nanoTime()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -381,15 +381,6 @@ class MixerTrackProcessor(bufferSize: Int, val rate: Int, val track: TerrarumAud
|
||||
}
|
||||
|
||||
|
||||
private fun <T> Queue<T>.removeFirstOrElse(function: () -> T): T {
|
||||
return if (this.isEmpty) {
|
||||
this.removeFirst()
|
||||
}
|
||||
else {
|
||||
function()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class FeedSamplesToAdev(val bufferSize: Int, val rate: Int, val track: TerrarumAudioMixerTrack) : Runnable {
|
||||
init {
|
||||
|
||||
@@ -65,7 +65,7 @@ class TerrarumAudioMixerTrack(
|
||||
|
||||
internal val streamPlaying = AtomicBoolean(false)
|
||||
var playStartedTime = 0L; internal set
|
||||
|
||||
var checkedOutTime = 0L; internal set
|
||||
|
||||
fun copyStatusTo(other: TerrarumAudioMixerTrack) {
|
||||
other.pullNextTrack = this.pullNextTrack
|
||||
@@ -163,7 +163,7 @@ class TerrarumAudioMixerTrack(
|
||||
|
||||
fun stop() {
|
||||
printdbg("TerrarumAudioMixerTrack $name", "Stop music (mixertrack=${this.name}, musictrack=$currentTrack)")
|
||||
printStackTrace("TerrarumAudioMixerTrack $name")
|
||||
// printStackTrace("TerrarumAudioMixerTrack $name")
|
||||
|
||||
currentTrack?.reset()
|
||||
|
||||
|
||||
@@ -160,6 +160,7 @@ abstract class Actor : Comparable<Actor>, Runnable {
|
||||
musicTracks[music] = track
|
||||
musicTracks1.add(track.name)
|
||||
track.stop()
|
||||
track.trackingTarget = this
|
||||
}
|
||||
else {
|
||||
// printdbg(this, "Could not get a free track")
|
||||
|
||||
@@ -112,8 +112,7 @@ class FixtureFurnaceAndAnvil : FixtureBase, CraftingStation {
|
||||
|
||||
// manage audio
|
||||
getTrackByAudio(static).let {
|
||||
printdbg(this, "hasbuf=${it?.processor?.streamBuf}, playing=${it?.isPlaying}, playRequested=${it?.playRequested}")
|
||||
|
||||
// printdbg(this, "Checking out track ${it?.name}")
|
||||
if (it != null) {
|
||||
|
||||
if (audioStatus == 0) {
|
||||
|
||||
Reference in New Issue
Block a user