mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 11:04:05 +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 {
|
fun getFreeTrackNoMatterWhat(): TerrarumAudioMixerTrack {
|
||||||
synchronized(this) {
|
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? {
|
fun getFreeTrack(): TerrarumAudioMixerTrack? {
|
||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
return dynamicTracks.filter { it.trackingTarget == null && !it.isPlaying }
|
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 {
|
class FeedSamplesToAdev(val bufferSize: Int, val rate: Int, val track: TerrarumAudioMixerTrack) : Runnable {
|
||||||
init {
|
init {
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ class TerrarumAudioMixerTrack(
|
|||||||
|
|
||||||
internal val streamPlaying = AtomicBoolean(false)
|
internal val streamPlaying = AtomicBoolean(false)
|
||||||
var playStartedTime = 0L; internal set
|
var playStartedTime = 0L; internal set
|
||||||
|
var checkedOutTime = 0L; internal set
|
||||||
|
|
||||||
fun copyStatusTo(other: TerrarumAudioMixerTrack) {
|
fun copyStatusTo(other: TerrarumAudioMixerTrack) {
|
||||||
other.pullNextTrack = this.pullNextTrack
|
other.pullNextTrack = this.pullNextTrack
|
||||||
@@ -163,7 +163,7 @@ class TerrarumAudioMixerTrack(
|
|||||||
|
|
||||||
fun stop() {
|
fun stop() {
|
||||||
printdbg("TerrarumAudioMixerTrack $name", "Stop music (mixertrack=${this.name}, musictrack=$currentTrack)")
|
printdbg("TerrarumAudioMixerTrack $name", "Stop music (mixertrack=${this.name}, musictrack=$currentTrack)")
|
||||||
printStackTrace("TerrarumAudioMixerTrack $name")
|
// printStackTrace("TerrarumAudioMixerTrack $name")
|
||||||
|
|
||||||
currentTrack?.reset()
|
currentTrack?.reset()
|
||||||
|
|
||||||
|
|||||||
@@ -160,6 +160,7 @@ abstract class Actor : Comparable<Actor>, Runnable {
|
|||||||
musicTracks[music] = track
|
musicTracks[music] = track
|
||||||
musicTracks1.add(track.name)
|
musicTracks1.add(track.name)
|
||||||
track.stop()
|
track.stop()
|
||||||
|
track.trackingTarget = this
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// printdbg(this, "Could not get a free track")
|
// printdbg(this, "Could not get a free track")
|
||||||
|
|||||||
@@ -112,8 +112,7 @@ class FixtureFurnaceAndAnvil : FixtureBase, CraftingStation {
|
|||||||
|
|
||||||
// manage audio
|
// manage audio
|
||||||
getTrackByAudio(static).let {
|
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 (it != null) {
|
||||||
|
|
||||||
if (audioStatus == 0) {
|
if (audioStatus == 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user