如何在 Racket 中播放 mp3/音频文件?
Posted
技术标签:
【中文标题】如何在 Racket 中播放 mp3/音频文件?【英文标题】:How play mp3/audio files in Racket? 【发布时间】:2020-06-15 15:23:46 【问题描述】:我打算为球拍制作一个 cli 音频播放器,作为学习球拍的练习,以及与该项目相关的所有其他内容。我被困住了如何开始。我找不到任何播放声音文件的包,所以我猜我可能必须制作一个。我该怎么办?
【问题讨论】:
这是个好问题。我在任何地方都找不到“播放 mp3”功能。 是的,似乎有一个用于播放 OGG 文件(这是一个相当低级的库)。我该如何开始? 如果您熟悉数字音频,您可以使用rsound
模块并编写您自己的实现。或者,您可以使用 PortAudio 或 OpenAL 进行 FFI。
&贵族考虑回答你自己的问题
【参考方案1】:
您可能想要的是#lang video
(website)。它为音频播放提供了高级接口。允许您执行以下操作:
#lang video
(clip "file.mp3")
既然你想做一个小小的命令行播放器,你可能还想看看它的小preview tool。
【讨论】:
【参考方案2】:我通过球拍调用 shell 脚本结束了这种骇人听闻的方式,一点也不理想。作为参考,把代码放在这里。
; This creates the initail rsound
; for a song, this rsound is passed around
; so the whole song doesn't have to be
; decoded from the file everytime.
(define (play filepath)
(cond [(string=? "mp3" (last (regexp-split #rx"\\." filepath)))
(system* "./mp3-hack" filepath)
(set! filepath "curr.wav")])
(define input-pstream (make-pstream))
(define input-rsound (rs-read filepath))
(pstream-play input-pstream input-rsound)
(values input-pstream input-rsound filepath))
而 mp3-hack 文件只使用 ffmpeg
#!/bin/sh
ffmpeg -i $1 -acodec pcm_s16le -ac 1 -ar 44100 curr.wav
是的,我知道。不优雅,但至少我得到了它的工作。我的黑客马拉松项目需要它MPEGMafia
【讨论】:
以上是关于如何在 Racket 中播放 mp3/音频文件?的主要内容,如果未能解决你的问题,请参考以下文章