MCPcopy
hub / github.com/g3n/engine / Read

Method Read

audio/audio_file.go:78–133  ·  view source on GitHub ↗

Read reads decoded data from the audio file

(pdata unsafe.Pointer, nbytes int)

Source from the content-addressed store, hash-verified

76
77// Read reads decoded data from the audio file
78func (af *AudioFile) Read(pdata unsafe.Pointer, nbytes int) (int, error) {
79
80 // Slice to access buffer
81 bs := (*[1 << 30]byte)(pdata)[0:nbytes:nbytes]
82
83 // Reads wave file directly
84 if af.wavef != nil {
85 n, err := af.wavef.Read(bs)
86 if err != nil {
87 return 0, err
88 }
89 if !af.looping {
90 return n, nil
91 }
92 if n == nbytes {
93 return n, nil
94 }
95 // EOF reached. Position file at the beginning
96 _, err = af.wavef.Seek(int64(waveHeaderSize), 0)
97 if err != nil {
98 return 0, nil
99 }
100 // Reads next data into the remaining buffer space
101 n2, err := af.wavef.Read(bs[n:])
102 if err != nil {
103 return 0, err
104 }
105 return n + n2, err
106 }
107
108 // Decodes Ogg vorbis
109 decoded := 0
110 for decoded < nbytes {
111 n, _, err := ov.Read(af.vorbisf, unsafe.Pointer(&bs[decoded]), nbytes-decoded, false, 2, true)
112 // Error
113 if err != nil {
114 return 0, err
115 }
116 // EOF
117 if n == 0 {
118 if !af.looping {
119 break
120 }
121 // Position file at the beginning
122 err = ov.PcmSeek(af.vorbisf, 0)
123 if err != nil {
124 return 0, err
125 }
126 }
127 decoded += n
128 }
129 if nbytes > 0 && decoded == 0 {
130 return 0, io.EOF
131 }
132 return decoded, nil
133}
134
135// Seek sets the file reading position relative to the origin

Callers 4

fillBufferMethod · 0.80
openWaveMethod · 0.80
ParseBinReaderFunction · 0.80
readChunkFunction · 0.80

Calls 3

ReadFunction · 0.92
PcmSeekFunction · 0.92
SeekMethod · 0.80

Tested by

no test coverage detected