random sound audio bank

This commit is contained in:
minjaesong
2024-08-16 22:38:47 +09:00
parent 1c27966322
commit fc92fe6f55
6 changed files with 75 additions and 36 deletions

View File

@@ -120,7 +120,7 @@ object WorldSimulator {
fun growOrKillGrass() {
// season-dependent growth rate
// https://www.desmos.com/calculator/ivxyxuj0bm
// https://www.desmos.com/calculator/4u5npfxgak
val baseCount = 2 * world.worldTime.timeDelta
val season = world.worldTime.ecologicalSeason.coerceIn(0f, 5f) // 1->1.0, 2.5->3.0, 4->1.0
val seasonalMult = 1f + sech2((season - 2.5f)) * 2f

View File

@@ -19,15 +19,15 @@ class AudioBankMusicBox(override var songFinishedHook: (AudioBank) -> Unit = {})
}
override val name = "spieluhr"
override val samplingRate = 48000f // 122880 // use 122880 to make each tick is 2048 samples
override val channels = 1
override var samplingRate = 48000f // 122880 // use 122880 to make each tick is 2048 samples
override var channels = 1
private val getSample = // usage: getSample(noteNum 0..60)
InstrumentLoader.load("spieluhr", "basegame", "audio/effects/notes/spieluhr.ogg", 41)
private val SAMPLES_PER_TICK = samplingRate / App.TICK_SPEED // should be 800 on default setting
override val totalSizeInSamples = getSample(0).first.size.toLong() // length of lowest-pitch note
override var totalSizeInSamples = getSample(0).first.size.toLong() // length of lowest-pitch note
private val messageQueue = ArrayList<Msg>()

View File

@@ -0,0 +1,53 @@
package net.torvald.terrarum.modulebasegame.audio.audiobank
import net.torvald.terrarum.audio.AudioBank
import net.torvald.terrarum.audio.AudioCodex
import net.torvald.terrarum.tryDispose
/**
* Created by minjaesong on 2024-08-16.
*/
open class AudioBankTemplateRandomSound(
private val audioCodex: AudioCodex,
/** Name must be equal to the name in the AudioCodex identifier */
override val name: String,
override var songFinishedHook: (AudioBank) -> Unit
) : AudioBank() {
override var samplingRate: Float = 48000f
override var channels: Int = 1
override var totalSizeInSamples: Long = 1152L
private var currentSample = audioCodex.getRandomAudio(name)!!.makeCopy()
set(value) {
field = value
samplingRate = value.samplingRate
channels = value.channels
totalSizeInSamples = value.totalSizeInSamples
}
private fun getNextRandomSample() {
currentSample = audioCodex.getRandomAudio(name)!!
}
override fun makeCopy(): AudioBank {
return AudioBankTemplateRandomSound(audioCodex, name, songFinishedHook)
}
override fun currentPositionInSamples() = currentSample.currentPositionInSamples()
override fun readSamples(bufferL: FloatArray, bufferR: FloatArray): Int {
return currentSample.readSamples(bufferL, bufferR)
}
override fun reset() {
currentSample.tryDispose()
getNextRandomSample()
}
override fun dispose() {
currentSample.tryDispose()
}
}