当前位置:网站首页 > Java教程 > 正文

java录音教程



捕获是指从计算机外部获取信号的过程。音频捕获的常见应用是录音,例如将麦克风输入录制到音频文件中。然而,捕获并不等同于录制,因为录制意味着应用程序始终保存正在进入的声音数据。捕获音频的应用程序不一定存储音频。相反,它可能会在音频到达时对数据进行处理 - 例如将语音转录成文本 - 但是一旦完成了每个缓冲区的处理,就会立即丢弃该缓冲区的音频。

如中所讨论的那样,Java Sound API的实现中,典型的音频输入系统由以下组成:

  1. 输入端口,如麦克风端口或线路输入端口,将其传入的音频数据传送到:
  2. 混音器,将输入数据放置在:
  3. 一个或多个目标数据线中,应用程序可以从中检索数据。

通常,一次只能打开一个输入端口,但也可以使用多个端口混音音频的音频输入混音器。另一种情况是混音器没有端口,而是通过网络获取其音频输入。

在中简要介绍了接口。 与接口直接对应,后者在中进行了详细讨论。回想一下,接口由以下内容组成:

  • 一个方法,用于将音频发送到混音器
  • 一个方法,用于确定可以在不阻塞的情况下将多少数据写入缓冲区

类似地,由以下内容组成:

  • 一个方法,用于从混音器获取音频
  • 一个方法,用于确定可以在不阻塞的情况下从缓冲区读取多少数据

获取目标数据线的过程在中已经描述过,但为了方便起见,在这里重复一下:

您可以调用方法,而不是方法。

如本示例所示,一旦您获得了目标数据行,您可以通过调用方法将其保留给您的应用程序使用,就像在中描述源数据行的情况一样。 方法的单参数版本使线路的缓冲区具有默认大小。您也可以通过调用两参数版本来根据您的应用程序需求设置缓冲区大小:

一旦打开了该线路,它就准备好开始捕获数据,但还不活动。要实际开始音频捕获,请使用方法。这将开始将输入音频数据传递到线路的缓冲区,以供您的应用程序读取。只有当应用程序准备好从线路中读取时,才应调用start,否则将浪费大量处理时间来填充捕获缓冲区,只有让其溢出(即丢弃数据)。

要从缓冲区开始检索数据,请调用read方法:

此方法尝试将字节的数据读入数组,从数组中的字节位置开始。该方法返回实际读取的字节数。

与方法一样,您可以请求比缓冲区实际容量更多的数据,因为该方法会阻塞,直到已传递所请求的数据量,即使您请求了多个缓冲区的数据。

为避免在录制过程中出现应用程序挂起,可以在循环中调用read方法,直到检索完所有音频输入,如下例所示:

请注意,在此示例中,将数据读入的字节数组的大小设置为线路缓冲区大小的五分之一。如果您将其设置为与线路缓冲区大小相同并尝试读取整个缓冲区,您需要非常准确地控制时间,因为如果混音器在您读取数据时需要将数据传递给线路,数据将被丢弃。通过使用线路缓冲区大小的一部分,如此示例所示,您的应用程序将更成功地与混音器共享对线路缓冲区的访问。

的方法接受三个参数:一个字节数组,一个数组中的偏移量,以及您想要读取的输入数据的字节数。在这个示例中,第三个参数只是您的字节数组的长度。方法返回实际读取到数组中的字节数。

通常情况下,您会在循环中从线路中读取数据,就像这个示例中一样。在循环内,每个检索到的数据块都根据应用程序的需要进行处理,这里将数据写入。这里没有显示的是使用单独的线程来设置布尔值,该值用于终止循环。当用户点击停止按钮时,可以将该布尔值设置为,同时当监听器从线路接收到或事件时也可以将其设置为。对于事件是必要的,对于事件是推荐的。否则,如果线路在没有将设置为的情况下被停止,循环将在每次迭代中捕获零字节,运行速度快,浪费CPU周期。更详细的代码示例将显示在捕获重新启用时重新进入循环。

与源数据线一样,也可以清空或刷新目标数据线。例如,如果您正在将输入录制到文件中,当用户点击停止按钮时,您可能希望调用方法。方法将导致混音器的剩余数据传送到目标数据线的缓冲区。如果不清空数据,则捕获的声音可能在结束时似乎被截断。

也可能有一些情况下,您希望刷新数据。无论如何,如果您既不刷新也不清空数据,则数据将留在混音器中。这意味着当捕获重新开始时,新录音的开头将有一些残留的声音,这可能是不希望的。因此,在重新启动捕获之前刷新目标数据线可能很有用。

因为接口扩展了,所以目标数据线以与源数据线相同的方式生成事件。您可以注册一个对象,以便在目标数据线打开、关闭、启动或停止时接收事件。有关更多信息,请参阅前面关于的讨论。

与某些源数据线一样,某些混音器的目标数据线具有信号处理控件,例如增益、平衡、混响或采样率控制。输入端口可能具有类似的控件,尤其是增益控件。在下一节中,您将学习如何确定一条线路是否具有此类控件,以及如果具有这些控件如何使用它们。

  • 上一篇: mac os java教程
  • 下一篇: java编程教程入门
  • 版权声明


    相关文章:

  • mac os java教程2024-12-15 16:10:05
  • java底层源码教程2024-12-15 16:10:05
  • java基础视频教程马士兵2024-12-15 16:10:05
  • 打代码教程java2024-12-15 16:10:05
  • java版制作模组教程2024-12-15 16:10:05
  • java编程教程入门2024-12-15 16:10:05
  • 30天java教程视频2024-12-15 16:10:05
  • java教程448集2024-12-15 16:10:05
  • java 新人教程2024-12-15 16:10:05
  • java jre 安装教程2024-12-15 16:10:05