设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 苏小脉
打印 上一主题 下一主题

[通用发布] Seal 0.1.1 「焦尾」3D音頻渲染庫

[复制链接]

Lv1.梦旅人

梦石
0
星屑
280
在线时间
14 小时
注册时间
2013-5-25
帖子
4
11
发表于 2013-5-26 00:11:50 | 只看该作者
支持一下吧,确实是不错的贴子。
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

12
发表于 2014-4-11 19:20:21 | 只看该作者
本帖最后由 Sion 于 2014-4-11 21:37 编辑

voice_005.rar (83.01 KB, 下载次数: 30)
反馈个小bug,这个wav文件加载不了。 已解决

这东西还是蛮好用的。

另外 Source initialize 的时候出 can't allocate additional memory 是为啥?
加载文件数目有限制?貌似是 257个就不行了,因为是做音乐游戏所以要缓存大量小文件,这个值能改吗?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
1641 小时
注册时间
2011-9-26
帖子
313
13
发表于 2014-4-11 21:22:51 | 只看该作者
Sion 发表于 2014-4-11 19:20
反馈个小bug,这个wav文件加载不了。
Seal.startup
s = Seal::Source.new

比特深度(bit depth)问题,参考主楼注意事项第二条:
Seal 並不支持解碼所有 WAVE 的子格式。Seal 只是出於測試的目的提供了對無壓縮的小於等於 16bps 的 WAVE 的支持,但實際上微軟官方的規格中有很多 WAVE 的子格式(包括壓縮失真格式)。建議大家統一使用 Ogg Vorbis 格式,開放自由。

我转了一个8bit的wav,测试可以播放
voice_005.zip (168.44 KB, 下载次数: 39)

附 foobar2000 转换设置,测试选择 8 bit 或 16 bit,seal 均可播放

点评

谢谢提醒,疏忽了  发表于 2014-4-11 21:36
愿善用者善用之
https://github.com/Shy07/SINRGE2
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
1641 小时
注册时间
2011-9-26
帖子
313
14
发表于 2014-4-11 21:39:06 | 只看该作者
Sion 发表于 2014-4-11 19:20
反馈个小bug,这个wav文件加载不了。 已解决

这东西还是蛮好用的。

"Cannot allocate additional memory" 问题最好确认一下音频文件有没有问题
  1. Searching 20 files for "SEAL_CANNOT_ALLOC_MEM"

  2. H:\Projects\seal-master\src\seal\err.c:
  3.    42      case SEAL_CANNOT_OPEN_FILE:
  4.    43          return "Cannot open the specified file";
  5.    44:     case SEAL_CANNOT_ALLOC_MEM:
  6.    45          return "Cannot allocate additional memory";
  7.    46  
  8.    ..
  9.   107          return SEAL_BAD_OP;
  10.   108      case AL_OUT_OF_MEMORY:
  11.   109:         return SEAL_CANNOT_ALLOC_MEM;
  12.   110      default:
  13.   111          return SEAL_OK;

  14. H:\Projects\seal-master\src\seal\ov.c:
  15.   117      povf = malloc(sizeof (OggVorbis_File));
  16.   118      if (povf == 0)
  17.   119:         return SEAL_CANNOT_ALLOC_MEM;
  18.   120  
  19.   121      if ((err = setup(&attr, povf, filename)) != SEAL_OK) {

  20. H:\Projects\seal-master\src\seal\raw.c:
  21.    13      buf = realloc(raw->data, size);
  22.    14      if (buf == 0)
  23.    15:         return SEAL_CANNOT_ALLOC_MEM;
  24.    16      raw->data = buf;
  25.    17      raw->size = size;
  26.    ..
  27.    26      raw->data = malloc(size);
  28.    27      if (raw->data == 0)
  29.    28:         return SEAL_CANNOT_ALLOC_MEM;
  30.    29  
  31.    30      return SEAL_OK;

  32. H:\Projects\seal-master\src\seal\src.c:
  33.   191      bufs = malloc(sizeof (unsigned int) * nbufs_processed);
  34.   192      if (bufs == 0)
  35.   193:         return SEAL_CANNOT_ALLOC_MEM;
  36.   194  
  37.   195      if ((err = unqueue_bufs(src, nbufs_processed, bufs)) == SEAL_OK)

  38. H:\Projects\seal-master\src\seal\wav.c:
  39.   209      wav_stream = malloc(sizeof (wav_stream_t));
  40.   210      if (wav_stream == 0)
  41.   211:         return SEAL_CANNOT_ALLOC_MEM;
  42.   212  
  43.   213      wav_stream->file = _seal_fopen(filename);
  44.   ...
  45.   258      data = malloc(nbytes);
  46.   259      if (data == 0)
  47.   260:         return SEAL_CANNOT_ALLOC_MEM;
  48.   261  
  49.   262      wav_stream->offset += nbytes;

  50. 8 matches across 5 files
复制代码
根据 seal 源码,这个属于文件加载错误
  1. buffers = []

  2. 1024.times { buffers << Seal::Buffer.new("voice_005.wav") }

  3. s = Seal::Source.new
  4. s.buffer = buffers[-1]

  5. s.play
复制代码
这段代码我这里测试没问题
愿善用者善用之
https://github.com/Shy07/SINRGE2
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

15
发表于 2014-4-11 21:45:34 | 只看该作者
本帖最后由 Sion 于 2014-4-11 21:53 编辑
Shy07 发表于 2014-4-11 21:39
"Cannot allocate additional memory" 问题最好确认一下音频文件有没有问题根据 seal 源码,这个属于文件 ...


感谢帮忙,不过这样测试就会出那个,应该是设置了最大值:
  1. Seal.startup
  2. 257.times { Seal::Source.new }
复制代码




@Shy07
刚又看漏了点什么 - -b
那就是buffer没有限制。这样应该没有问题了,谢谢帮忙

点评

OK,楼下我想说的就是这意思  发表于 2014-4-11 22:04
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
1641 小时
注册时间
2011-9-26
帖子
313
16
发表于 2014-4-11 22:03:49 | 只看该作者
Sion 发表于 2014-4-11 21:45
感谢帮忙,不过这样测试就会出那个,应该是设置了最大值:

这个应该是硬性限制了,256 个 Source,也就是 256 个声源同时播放
如果只是加载 256 个以上的文件,但同时播放的数量小于 256 个的话,建议使用我前面给出的方案
加载若干个文件到 Buffer,等需要的时候给空闲的 Source#buffer 赋值,再进行播放

如果要同时播放 256 个音频文件的话,那估计需要修改 OpenAL 源码了,甚至有可能修改都不起作用,电脑硬件也可能有限制
愿善用者善用之
https://github.com/Shy07/SINRGE2
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
875
在线时间
5 小时
注册时间
2016-10-27
帖子
1
17
发表于 2016-11-5 13:49:19 | 只看该作者
好东西,{:4_95:}{:4_95:}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-22 09:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表