Skip to content

Commit

Permalink
Fix #10, #12, #14 damn I hate audio files
Browse files Browse the repository at this point in the history
  • Loading branch information
kikugie committed Oct 5, 2024
1 parent 99fe197 commit e08aa8f
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@ import dev.kikugie.soundboard.audio.data.AudioConfiguration
import dev.kikugie.soundboard.util.offset
import dev.kikugie.soundboard.util.volumeScale
import javax.sound.sampled.AudioFormat
import kotlin.time.Duration

class ArrayAudioProvider(
private val data: ShortArray,
override val format: AudioFormat,
override val configuration: AudioConfiguration,
) : AudioProvider() {
override val until = format.offset(configuration.end).coerceAtMost(data.size)
override val until = configuration.end.let {
if (it == Duration.INFINITE) data.size
else format.offset(it)
}
override val volume: Double = configuration.volume.coerceIn(0.0, 1.0).volumeScale
override var cursor: Int = format.offset(configuration.start)
override fun next(samples: Int) = advance(samples) { array, end ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@ import dev.kikugie.soundboard.audio.data.AudioConfiguration
import dev.kikugie.soundboard.util.*
import javax.sound.sampled.AudioFormat
import javax.sound.sampled.AudioInputStream
import kotlin.time.Duration

class StreamAudioProvider(
private val input: AudioInputStream,
override val configuration: AudioConfiguration,
) : AudioProvider() {
private val duration = input.duration
override val format: AudioFormat = input.format
override val until = format.offset(configuration.end).coerceAtMost(format.offset(duration))
override val until = configuration.end.let {
if (it == Duration.INFINITE) Int.MAX_VALUE
else format.offset(it)
}
override val volume: Double = configuration.volume.coerceIn(0.0, 1.0).volumeScale
override var cursor: Int = format.offset(configuration.start)

Expand All @@ -20,7 +23,9 @@ class StreamAudioProvider(
}

override fun next(samples: Int) = advance(samples) { array, end ->
bytesToShorts(input.readNBytes((end - cursor) * format.frameSize)).copyInto(array)
val bytes = input.readNBytes(samples * format.frameSize)
if (bytes.size < array.size / 2) cursor = Int.MAX_VALUE
bytesToShorts(bytes).copyInto(array)
}

override fun close() {
Expand Down

0 comments on commit e08aa8f

Please sign in to comment.