Прочитайте * .wav файл в golang

Я использовал file_get_contents для чтения wav-файла в php, и я хочу использовать пакет github.com/mjibson/go-dsp/wav для той же задачи в Go. Но нет простого примера об этом пакете. Я новичок в Go и не понимаю этого. Кто-нибудь ведет меня или предлагает другой путь?

Код в php:

    $wsdl = 'http://myApi.asmx?WSDL';
$client = new SoapClient($wsdl));
$data = file_get_contents(public_path() . "/forTest/record.wav");
$param = array(
'userName' => '***',
'password' => '***',
'file' => $data);

$res = $client->UploadMessage($param);

-2

Решение

Похоже, вам не нужно использовать этот пакет github.com/mjibson/go-dsp/wav

Функция file_get_contents — это предпочтительный способ чтения содержимого файла в строку.

В Go вы можете сделать что-то вроде этого:

package main

import (
"fmt""io/ioutil")

func public_path() string {
return "/public/path/"}

func main() {
dat, err := ioutil.ReadFile(public_path() + "/forTest/record.wav")
if err != nil {
fmt.Println(err)
}
fmt.Print(string(dat))
}

https://play.golang.org/p/l9R0940iK50

1

Другие решения

Я думаю, что вам просто нужно прочитать файл, это действительно не имеет значения, является ли это. WAV или какой-то другой файл. Ты можешь использовать go's встроенный пакет io/ioutil,

Вот что вы должны сделать в go прочитать файл на диске:

package main

import (
"fmt""io/ioutil""log")

func main() {
// Reading .wav file from disk.

fileData, err := ioutil.ReadFile("DISK_RELATIVE_PATH_PREFIX" + "/forTest/record.wav")

// ioutil.ReadFile returns two results,
// first one is data (slice of byte i.e. []byte) and the other one is error.
// If error is having nil value, you got successfully read the file,
// otherwise you need to handle the error.

if err != nil {
// Handle error here.

log.Fatal(err)
} else {
// Do whatever needed with the 'fileData' such as just print the data,
// or send it over the network.

fmt.Print(fileData)
}
}

Надеюсь это поможет.

0

Учитывая wav-файл, он возвращает свою полезную нагрузку в виде звуковой кривой с плавающей запятой вместе с важными деталями аудиофайла, такими как битовая глубина, частота дискретизации и num-каналы … если бы вы просто прочитали двоичный аудиофайл, используя один из базовых операций ввода-вывода Примитивы, чтобы получить звуковую кривую, вам придется бороться со своим собственным битовым смещением, чтобы вытащить многобайтовые целочисленные значения, а также обрабатывать большие или малые порядковые номера … как вы все еще должны знать, как обрабатывать многоканальное чередование сэмплов аудио с каждого канала, что не является проблемой для монофонического аудио

package main

import (

"fmt""os""github.com/youpy/go-wav")

func read_wav_file(input_file string, number_of_samples uint32) ([]float64, uint16, uint32, uint16) {

if number_of_samples == 0 {

number_of_samples = 268435456 // make default some big number
}

blockAlign := 2
file, err := os.Open(input_file)
if err != nil {
panic(err)
}

reader := wav.NewReader(file)
wavformat, err_rd := reader.Format()
if err_rd != nil {
panic(err_rd)
}

if wavformat.AudioFormat != wav.AudioFormatPCM {
panic("Audio format is invalid ")
}

if int(wavformat.BlockAlign) != blockAlign {
fmt.Println("Block align is invalid ", wavformat.BlockAlign)
}

samples, err := reader.ReadSamples(number_of_samples) // must supply num samples w/o defaults to 2048 stens TODO
//                                                    // just supply a HUGE number then actual num is returned
wav_samples := make([]float64, 0)

for _, curr_sample := range samples {
wav_samples = append(wav_samples, reader.FloatValue(curr_sample, 0))
}

return wav_samples, wavformat.BitsPerSample, wavformat.SampleRate, wavformat.NumChannels
}

func main() {

input_audio := "/blah/genome_synth_evolved.wav"
audio_samples, bits_per_sample, input_audio_sample_rate, num_channels := read_wav_file( input_audio, 0)

fmt.Println("num samples ", len(audio_samples)/int(num_channels))
fmt.Println("bit depth   ",  bits_per_sample)
fmt.Println("sample rate ", input_audio_sample_rate)
fmt.Println("num channels", num_channels)
}
0
По вопросам рекламы [email protected]