- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 SharpDX 在 vb.net 中为 Windows RT 应用程序实现声音功能,我需要将此类转换为 vb.net:
using SharpDX.IO;
using SharpDX.Multimedia;
using SharpDX.XAudio2;
using System.Collections.Generic;
using System.Linq;
namespace PlayWaveRT {
public class WaveManager {
private XAudio2 xAudio;
private List<Wave> waves = new List<Wave>();
public WaveManager() {
xAudio = new XAudio2();
var mastering = new MasteringVoice(xAudio);
mastering.SetVolume(1, 0);
xAudio.StartEngine();
}
public void LoadWave(string path, string key) {
var buffer = GetBuffer(path);
waves.Add(new Wave { Buffer = buffer, Key = key });
}
public void PlayWave(string key) {
var wave = waves.FirstOrDefault(x => x.Key == key);
if (wave != null) {
var voice = new SourceVoice(xAudio, wave.Buffer.WaveFormat, true);
voice.SubmitSourceBuffer(wave.Buffer, wave.Buffer.DecodedPacketsInfo);
voice.Start();
}
}
private AudioBufferAndMetaData GetBuffer(string soundfile) {
var nativefilestream = new NativeFileStream(soundfile, NativeFileMode.Open, NativeFileAccess.Read, NativeFileShare.Read);
var soundstream = new SoundStream(nativefilestream);
var buffer = new AudioBufferAndMetaData {
Stream = soundstream.ToDataStream(),
AudioBytes = (int)soundstream.Length,
Flags = BufferFlags.EndOfStream,
WaveFormat = soundstream.Format,
DecodedPacketsInfo = soundstream.DecodedPacketsInfo
};
return buffer;
}
private sealed class AudioBufferAndMetaData : AudioBuffer {
public WaveFormat WaveFormat { get; set; }
public uint[] DecodedPacketsInfo { get; set; }
}
private class Wave {
public AudioBufferAndMetaData Buffer { get; set; }
public string Key { get; set; }
}
}
}
这是我所做的:
Imports SharpDX.IO
Imports SharpDX.Multimedia
Imports SharpDX.XAudio2
Imports System.Collections.Generic
Imports System.Linq
Namespace PlayWaveRT
Public Class WaveManager
Private xAudio As XAudio2
Private waves As New List(Of Wave)()
Public Sub New()
xAudio = New XAudio2()
Dim mastering = New MasteringVoice(xAudio)
mastering.SetVolume(1, 0)
xAudio.StartEngine()
End Sub
Public Sub LoadWave(path As String, key1 As String)
Dim buffer1 = GetBuffer(path)
Dim wave As New Wave()
wave.Buffer = buffer1
wave.Key = key1
End Sub
Public Sub PlayWave(key1 As String)
Dim wave = waves.FirstOrDefault(Function(x) x.Key = key1)
If wave IsNot Nothing Then
Dim voice = New SourceVoice(xAudio, wave.Buffer.WaveFormat, True)
voice.SubmitSourceBuffer(wave.Buffer, wave.Buffer.DecodedPacketsInfo)
voice.Start()
End If
End Sub
Private Function GetBuffer(soundfile As String) As AudioBufferAndMetaData
Dim nativefilestream = New NativeFileStream(soundfile, NativeFileMode.Open, NativeFileAccess.Read, NativeFileShare.Read)
Dim soundstream = New SoundStream(nativefilestream)
Dim buffer = New AudioBufferAndMetaData()
buffer.Stream = soundstream.ToDataStream()
buffer.AudioBytes = CInt(soundstream.Length)
buffer.Flags = BufferFlags.EndOfStream
buffer.WaveFormat = soundstream.Format
buffer.DecodedPacketsInfo = soundstream.DecodedPacketsInfo
Return buffer
End Function
Private Class AudioBufferAndMetaData
Inherits AudioBuffer
Private m_WaveFormat As WaveFormat
Private m_DecodedPacketsInfo As UInteger()
Public Property WaveFormat As WaveFormat
Get
Return m_WaveFormat
End Get
Set(value As WaveFormat)
m_WaveFormat = value
End Set
End Property
Public Property DecodedPacketsInfo As UInteger()
Get
Return m_DecodedPacketsInfo
End Get
Set(value As UInteger())
m_DecodedPacketsInfo = value
End Set
End Property
End Class
Private Class Wave
Private m_Buffer As AudioBufferAndMetaData
Private m_Key As String
Public Property Buffer As AudioBufferAndMetaData
Get
Return m_Buffer
End Get
Set(value As AudioBufferAndMetaData)
m_Buffer = value
End Set
End Property
Public Property Key As String
Get
Return m_Key
End Get
Set(value As String)
m_Key = value
End Set
End Property
End Class
End Class
End Namespace
我没有编译器错误,但代码无法正常工作,我不知道问题出在哪里。
我已经将 SharpDX.dll 和 SharpDX.XAudio2.dll 导入到我的项目中
这就是我在我的项目中使用这个类的方式:
Imports The_Game_of_15.PlayWaveRT
Public NotInheritable Class SelectPage
Inherits Page
Private waveManager As New WaveManager()
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
..........
..........
waveManager.LoadWave("select.wav", "select")
End Sub
Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
waveManager.PlayWave("select")
End Sub
End Class
我可以毫无错误地编译项目,但是当我点击按钮时它没有播放任何声音。谁能帮我?提前致谢。
最佳答案
您忘记在列表中添加
您的元素:
C#
waves.Add(new Wave { Buffer = buffer, Key = key });
VB.Net
Dim wave As New Wave()
wave.Buffer = buffer1
wave.Key = key1
话虽如此,在调试器中很容易理解...
关于c# - 将 C# 代码转换为 vb.net 问题 (Windows RT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887955/
是否可以编写一个控制台 EXE 应用程序,如“hello, world!”用于 Surface RT? 我以为编译ARM就可以了,但是好像没有这样的编译选项。 我安装了 Office 2013 RT
是否可以编写一个控制台 EXE 应用程序,如“hello, world!”用于 Surface RT? 我以为编译ARM就可以了,但是好像没有这样的编译选项。 我安装了 Office 2013 RT
我尝试在 Clojure 中尽可能快地进行复数数组的乘法运算。 选择的数据结构是两个元素的映射,:re 和 :im,每个元素都是原始 double 的 Java native 数组,用于低内存开销。
目录 1. Ubuntu Pro简介 2. Real-time Ubuntu 3. 订阅Ubuntu Pro 4.
我已经实现了流转换器。请注意,这只是一个练习(为了学习 Dart)。此转换器将整数转换为字符串。我给出下面的代码,你也可以在GitHub上找到它. // Conceptually, a transfo
我正在考虑在使用 RT-PREEMPT(使其实时)修补的 Linux 内核上将 ZeroMQ 设置为消息代理。 基本上我想发布/订阅使用谷歌 Protocol Buffer 序列化的短事件。 1. E
alt-rt.jar中的HashMap有什么区别和 rt.jar。我想我看到了相当大的加速在我的一个应用程序中,解释是什么? 最好的问候 P.S.: 我发现了两个不同的 *.jar在 JDK 1.6.
我知道Surface RT版本只能运行Windows Store应用程序。那么,我可以将自己的 Windows 应用商店应用部署到 Surface RT 并通过 Visual Studio 2012
在我将 Android Studio 更新到 3.0 并按照此 instruction 迁移了我的项目之后 我得到这样的错误: * What went wrong: Execution failed
当 jaxws-rt.jar 已经可用时,我不明白在 rt.jar 中使用 jax-ws 包的“内部”实现。为什么 Sun/Oracle 会做出这样的决定,将 jax-ws 集成到 jdk 中....
介绍 RT-Thread Studio是官方出品的一款专门针对RT-Thread嵌入式开发、部署、调试、测试的集成开发环境,它基于Eclipse开源项目开发,极大的提高了嵌入式开发者的开发效率,目前
在 .NET Web 应用程序的负载测试期间监视性能计数器时,一个名为“RT 检查时间百分比”的计数器不断超过默认临界阈值 10。 为什么花费大量时间进行运行时检查是不好的? 这对我们的应用程序有何影
我正在寻找支持 UML-RT 的建模工具,但我找不到。 我已经拥有 MS Visio (2010)、Power Designer (2008) 和 Rational Rose,但似乎它们都不包含 UM
rt linux 中的客户端和服务器通信。客户端发送数据,服务器接收数据。客户端和服务器之间使用UDP进行通信。当服务器(rt linux)从客户端接收到数据时,内核应该停止正在做的事情并开始执行新到
rt linux 中的客户端和服务器通信。客户端发送数据,服务器接收数据。客户端和服务器之间使用UDP进行通信。当服务器(rt linux)从客户端接收到数据时,内核应该停止正在做的事情并开始执行新到
我正在尝试在我的应用程序中对某些帧进行双重缓冲。但是,双缓冲要求我根据我试图保留额外数据 block 的区域更改 Texture2D 大小。 为双缓冲区的每个区域请求一个新的 CreateTextur
我正在学习如何使用 RT 计时器创建周期性事件。我尝试使用这个基于 timer_create 文档示例的示例。 预期的行为是每 5 秒产生一个周期性事件,同时主执行休眠 30 秒,但我得到以下行为。
一、基本信息 MCU:STM32F103ZET6 RT-Thread:5.0.2 LVGL:8.3.11 LCD:ST7735s 编译环境:RTThread studio
我向 rt 索引添加了新字段,如何重建它?如果我做截断 rtindex 新字段不添加。我是从desc rtindex看到的。我应该停止 sphinx 服务并取消链接所有索引文件然后重新索引吗? 最佳答
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
我是一名优秀的程序员,十分优秀!