Mercurial > games > semicongine
comparison semiconginev2/audio/resources.nim @ 1234:841e12f33c47
add: text & font rendering, not tested yet
author | sam <sam@basx.dev> |
---|---|
date | Sat, 20 Jul 2024 00:03:57 +0700 |
parents | 27cd1c21290e |
children |
comparison
equal
deleted
inserted
replaced
1233:1cf698973dca | 1234:841e12f33c47 |
---|---|
52 result.add stream.readSample(header.encoding, int(header.channels)) | 52 result.add stream.readSample(header.encoding, int(header.channels)) |
53 | 53 |
54 {.compile: currentSourcePath.parentDir() & "/stb_vorbis.c".} | 54 {.compile: currentSourcePath.parentDir() & "/stb_vorbis.c".} |
55 | 55 |
56 proc stb_vorbis_decode_memory(mem: pointer, len: cint, channels: ptr cint, sample_rate: ptr cint, output: ptr ptr cshort): cint {.importc.} | 56 proc stb_vorbis_decode_memory(mem: pointer, len: cint, channels: ptr cint, sample_rate: ptr cint, output: ptr ptr cshort): cint {.importc.} |
57 proc free(p: pointer) {.importc.} | |
58 | 57 |
59 proc ReadVorbis*(stream: Stream): SoundData = | 58 proc ReadVorbis*(stream: Stream): SoundData = |
60 var | 59 var |
61 data = stream.readAll() | 60 data = stream.readAll() |
62 channels: cint | 61 channels: cint |
71 raise newException(Exception, &"Only support sample rate of {AUDIO_SAMPLE_RATE} Hz but got {sampleRate} Hz, please resample (e.g. ffmpeg -i <infile> -acodec libvorbis -ar {AUDIO_SAMPLE_RATE} <outfile>)") | 70 raise newException(Exception, &"Only support sample rate of {AUDIO_SAMPLE_RATE} Hz but got {sampleRate} Hz, please resample (e.g. ffmpeg -i <infile> -acodec libvorbis -ar {AUDIO_SAMPLE_RATE} <outfile>)") |
72 | 71 |
73 if channels == 2: | 72 if channels == 2: |
74 result.setLen(int(nSamples)) | 73 result.setLen(int(nSamples)) |
75 copyMem(addr result[0], output, nSamples * sizeof(Sample)) | 74 copyMem(addr result[0], output, nSamples * sizeof(Sample)) |
76 free(output) | 75 nativeFree(output) |
77 elif channels == 1: | 76 elif channels == 1: |
78 for i in 0 ..< nSamples: | 77 for i in 0 ..< nSamples: |
79 let value = cast[ptr UncheckedArray[int16]](output)[i] | 78 let value = cast[ptr UncheckedArray[int16]](output)[i] |
80 result.add [value, value] | 79 result.add [value, value] |
81 free(output) | 80 nativeFree(output) |
82 else: | 81 else: |
83 free(output) | 82 nativeFree(output) |
84 raise newException(Exception, "Only support mono and stereo audio at the moment (1 or 2 channels), but found " & $channels) | 83 raise newException(Exception, "Only support mono and stereo audio at the moment (1 or 2 channels), but found " & $channels) |
85 | 84 |
86 proc LoadAudio*(path: string, package = DEFAULT_PACKAGE): SoundData = | 85 proc LoadAudio*(path: string, package = DEFAULT_PACKAGE): SoundData = |
87 if path.splitFile().ext.toLowerAscii == ".au": | 86 if path.splitFile().ext.toLowerAscii == ".au": |
88 loadResource_intern(path, package = package).ReadAU() | 87 loadResource_intern(path, package = package).ReadAU() |