audio.go 786 B

12345678910111213141516171819202122232425262728293031
  1. package service
  2. import (
  3. "encoding/base64"
  4. "fmt"
  5. )
  6. func parseAudio(audioBase64 string, format string) (duration float64, err error) {
  7. audioData, err := base64.StdEncoding.DecodeString(audioBase64)
  8. if err != nil {
  9. return 0, fmt.Errorf("base64 decode error: %v", err)
  10. }
  11. var samplesCount int
  12. var sampleRate int
  13. switch format {
  14. case "pcm16":
  15. samplesCount = len(audioData) / 2 // 16位 = 2字节每样本
  16. sampleRate = 24000 // 24kHz
  17. case "g711_ulaw", "g711_alaw":
  18. samplesCount = len(audioData) // 8位 = 1字节每样本
  19. sampleRate = 8000 // 8kHz
  20. default:
  21. samplesCount = len(audioData) // 8位 = 1字节每样本
  22. sampleRate = 8000 // 8kHz
  23. }
  24. duration = float64(samplesCount) / float64(sampleRate)
  25. return duration, nil
  26. }