audio.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package service
  2. import (
  3. "encoding/base64"
  4. "fmt"
  5. "strings"
  6. )
  7. func parseAudio(audioBase64 string, format string) (duration float64, err error) {
  8. audioData, err := base64.StdEncoding.DecodeString(audioBase64)
  9. if err != nil {
  10. return 0, fmt.Errorf("base64 decode error: %v", err)
  11. }
  12. var samplesCount int
  13. var sampleRate int
  14. switch format {
  15. case "pcm16":
  16. samplesCount = len(audioData) / 2 // 16位 = 2字节每样本
  17. sampleRate = 24000 // 24kHz
  18. case "g711_ulaw", "g711_alaw":
  19. samplesCount = len(audioData) // 8位 = 1字节每样本
  20. sampleRate = 8000 // 8kHz
  21. default:
  22. samplesCount = len(audioData) // 8位 = 1字节每样本
  23. sampleRate = 8000 // 8kHz
  24. }
  25. duration = float64(samplesCount) / float64(sampleRate)
  26. return duration, nil
  27. }
  28. func DecodeBase64AudioData(audioBase64 string) (string, error) {
  29. // 检查并移除 data:audio/xxx;base64, 前缀
  30. idx := strings.Index(audioBase64, ",")
  31. if idx != -1 {
  32. audioBase64 = audioBase64[idx+1:]
  33. }
  34. // 解码 Base64 数据
  35. _, err := base64.StdEncoding.DecodeString(audioBase64)
  36. if err != nil {
  37. return "", fmt.Errorf("base64 decode error: %v", err)
  38. }
  39. return audioBase64, nil
  40. }