使用 NAudio 在指定位置应用线性淡入淡出

2023-11-30

我正在利用NAudio在我编写的 C# 程序中。

我想要在某个位置应用线性淡入淡出在我正在使用的一段音频中。

在 NAudio 示例项目中有一个名为 FadeInOutSampleProvider.cs 的文件(缓存示例) 其中有BeginFadeIn(double fadeDurationInMilliseconds) and BeginFadeOut(double fadeDurationInMilliseconds)方法。

我重新设计了这些方法BeginFadeOut(double fadeDurationInMilliseconds, double beginFadeAtMilliseconds) and BeginFadeOut(double fadeDurationInMilliseconds, double beginFadeAtMilliseconds)

然而,我很难实现这些更改的时间间隔逻辑。

我的第一个想法是在Read()方法。调用时,它将用请求的字节数除以采样率,从而得出请求的音频的秒数。

然后我可以跟踪这一点,当读取了正确数量的自动数据时,允许应用淡入淡出。

然而,我在计算中没有得到我期望看到的数字。我确信有更好的方法来解决这个问题。

任何帮助将非常感激。


听起来你的工作方向是正确的。正如您所说,请求的音频量可以通过将请求的样本数除以采样率来计算。但您还必须考虑渠道。在立体声文件中,每秒的样本数是采样率的两倍。

我已经将延迟淡出的非常基本的代码示例放在GitHub 要点在这里。可以进行一些改进,例如允许在从调用返回的音频中途开始淡出Read但希望这能让您大致了解如何通过对 FadeInOutSampleProvider 进行一些小修改来实现它。

主要变化是 BeginFadeOut 的一个额外参数,它设置两个新变量(fadeOutDelaySamples、fadeOutDelayPosition):

/// <summary>
/// Requests that a fade-out begins (will start on the next call to Read)
/// </summary>
/// <param name="fadeDurationInMilliseconds">Duration of fade in milliseconds</param>
public void BeginFadeOut(double fadeAfterMilliseconds, double fadeDurationInMilliseconds)
{
    lock (lockObject)
    {
        fadeSamplePosition = 0;
        fadeSampleCount = (int)((fadeDurationInMilliseconds * source.WaveFormat.SampleRate) / 1000);
        fadeOutDelaySamples = (int)((fadeAfterMilliseconds * source.WaveFormat.SampleRate) / 1000);
        fadeOutDelayPosition = 0;

       //fadeState = FadeState.FadingOut;
   }
}

然后在Read方法我们可以跟踪延迟的程度,如果是这样,我们可以开始淡出

public int Read(float[] buffer, int offset, int count)
{
   int sourceSamplesRead = source.Read(buffer, offset, count);

   lock (lockObject)
   {
        if (fadeOutDelaySamples > 0)
        {
            fadeOutDelayPosition += sourceSamplesRead / WaveFormat.Channels;
            if (fadeOutDelayPosition >= fadeOutDelaySamples)
            {
                fadeOutDelaySamples = 0;
                fadeState = FadeState.FadingOut;
            }
        }
       if (fadeState == FadeState.FadingIn)
       {
           FadeIn(buffer, offset, sourceSamplesRead);
       }
       else if (fadeState == FadeState.FadingOut)
       {
           FadeOut(buffer, offset, sourceSamplesRead);
       }
       else if (fadeState == FadeState.Silence)
       {
           ClearBuffer(buffer, offset, count);
       }
   }
   return sourceSamplesRead;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NAudio 在指定位置应用线性淡入淡出 的相关文章

随机推荐

  • 将图像异步加载到 UIImage 中

    我正在使用 iOS 5 0 SDK 和 XCode 4 2 开发 iOS 4 应用程序 我必须在 UITableView 中显示一些帖子博客 当我检索到所有 Web 服务数据后 我使用此方法创建 UITableViewCell BlogTa
  • Objective-C - 如何将 NSString 转换为转义 JSON 字符串?

    我有一个可能包含引号 r n 的 NSString 我想将其转换为 JSON 编码的字符串 这样的字符串 文本1 文本2 becomes 文本1 文本2 是否有现有的功能可以让我这样做 另外 我在我的项目中使用 SBJson 但我找不到 S
  • 限制 OpenFileDialog 的多选

    我有一个OpenFileDialog和它的MultiSelect财产是ON 我的问题是如何限制要选择的项目数量 例如仅 5 个项目 Thanks 您可以使用 FileOk 事件来检查用户单击 确定 按钮时选择的文件 如果您不满意 则显示一条
  • 使用 PHP GD 对 PNG 图像进行着色

    我有一个带有透明背景和白色圆圈的 PNG 图像 我正在尝试将白色圆圈着色为特定颜色 但我在使用此代码时遇到困难 src imagecreatefrompng circle png handle imagecolorclosest src 2
  • Keras:下载 Fashion_MNIST 数据时出错

    我正在尝试从 Fashion MNIST 下载数据 但出现错误 最初 它正在下载并正常工作 但我不得不终止它 因为我必须关闭计算机 当我再次打开该文件时 它给了我一个错误 我不确定问题是什么 但是否是因为我已经下载过一次数据的某些部分 而
  • 使用 MVC 3 依赖注入和 Ninject 2.2 将全局操作过滤器绑定到区域中的所有控制器

    由于我在此收到的帮助 我能够使用 ASP NET MVC 3 和 Ninject 2 2 将记录器对象注入到自定义 ActionFilterAttribute 中post 现在我想将自定义 ActionFilterAttribute 仅绑定
  • 将文件上传到 Google 云端硬盘?

    我按照此文档将文件上传到 Google 云端硬盘 https developers google com drive android files 现在 每次我想上传文件时 都会出现 Google Drive 的弹出窗口 询问我在哪里上传文件
  • PowerShell 递归搜索名称包含“...”的文件和文件夹

    我需要帮助来创建一个可以挽救我生命的脚本 我的备份软件出错了 因为我错误地设计了备份计划 而且我有很多命名文件 文件名或文件夹名称 2 编码冲突 我想递归搜索我的网络共享以查找名称中带有 编码冲突 的文件夹和文件 然后首先导出它们以进行验证
  • Zookeeper运行在两个节点上

    我遇到过这样的情况 Zookeeper 配置为 2 个节点 但有时它开始同时在两个节点上运行 为什么会发生这种情况 要构建具有主从架构的整体 您需要拥有奇数个 Zookeeper 服务器 即 1 3 5 7 等 3 人的集成可以处理一台服务
  • AngularJS Post 请求在 Firefox 上无法正常工作

    我正在使用 AngularJS 编写一个网站 它与服务器上的 API 进行通信并提供一些信息 对于登录部分 我应该发送一个包含电子邮件 密码等的 http post 请求 它在 google Chrome 和 IE 上运行良好 我的意思是它
  • 从 Amazon S3 迁移到 Azure 存储(Django Web 应用程序)

    我维护这个 Django Web 应用程序 用户可以在其中聚集并互相聊天 如果他们愿意 他们也可以发布照片 我处理这些照片 即优化其大小 并将它们存储在 Amazon S3 存储桶 类似于 Azure 存储中的 容器 上 为此 我在 Ama
  • 在 shell 脚本中读取 JSON 数据[重复]

    这个问题在这里已经有答案了 在 shell 中 我有一个要求 其中我必须读取以下格式的 JSON 响应 Messages Body 172 16 1 42 home 480 1234 5 12 2013 1234 toSort Receip
  • R 中的约束线性回归系数[重复]

    这个问题在这里已经有答案了 我正在估计 R 中的几个普通最小二乘线性回归 我想限制回归中的估计系数 使它们相同 例如 我有以下内容 z1 x y z2 x y 我希望第一个回归中 y 的估计系数等于第二个回归中 x 的估计系数 有没有直接的
  • 为什么我的 http://schema.org/BreadcrumbList 未验证?

    我在我的网站上使用 schema org 微数据 但我正在努力解决面包屑列表作为谷歌的结构化数据测试工具不会验证它 它看起来是正确的 我看不出有什么问题 您可以单击上面的链接来查看错误 但总而言之 Google 表示每个项目的 itemty
  • 是否可以更新本地化故事板的字符串?

    我通过创建一个 base lproj 故事板和 3 个字符串文件来本地化我的应用程序的一部分 那是一个月前 之后我向应用程序添加了新的视图控制器 但该控制器的按钮和标签没有出现在字符串文件中 是否可以更新这 3 个情节提要附加的字符串文件
  • 在循环中绑定单击事件处理程序会导致 jQuery 出现问题

    我正在尝试运行以下代码 我将参数传递给函数 但它始终具有循环中运行的最后一个对象的值 我在 stackoverflow 上阅读了一些有关它的文章 但我找不到如何使其在我的解决方案中运行 该对象是从服务器返回的 JSON 对象 它的所有值都是
  • bootstrap自定义发生了什么?

    Bootstrap 3 曾经有这个自定义选项 https getbootstrap com docs 3 3 customize 但是 我无法找到 Bootstrap 4 的此类链接 我只是构建一个简单的网站 并且肯定不会使用它 80 的功
  • 使用 tfslim 解码 tfrecord

    我在 CPU 上使用 Python 2 7 13 和 Tensorflow 1 3 0 我想使用 DensNet https github com pudae tensorflow densenet 来解决回归问题 我的数据包含 60000
  • Android:使用 ImageView 显示 sdcard 中的 .jpg 图像

    我正在尝试将 SD 卡中的 jpg 显示到布局中的图像视图中 我没有收到任何错误 但没有显示任何内容 我将不胜感激任何帮助 谢谢 EDIT layout1 LinearLayout findViewById R id layout1Acti
  • 使用 NAudio 在指定位置应用线性淡入淡出

    我正在利用NAudio在我编写的 C 程序中 我想要在某个位置应用线性淡入淡出在我正在使用的一段音频中 在 NAudio 示例项目中有一个名为 FadeInOutSampleProvider cs 的文件 缓存示例 其中有BeginFade