浏览代码

-some fixes to audio

Juan Linietsky 10 年之前
父节点
当前提交
281d6fac1e
共有 2 个文件被更改,包括 11 次插入4 次删除
  1. 6 4
      scene/audio/stream_player.cpp
  2. 5 0
      servers/audio/audio_rb_resampler.h

+ 6 - 4
scene/audio/stream_player.cpp

@@ -141,8 +141,8 @@ void StreamPlayer::play(float p_from_offset) {
 	ERR_FAIL_COND(!is_inside_tree());
 	if (playback.is_null())
 		return;
-	if (playback->is_playing())
-		stop();
+	//if (is_playing())
+	stop();
 
 	//_THREAD_SAFE_METHOD_
 	playback->play(p_from_offset);
@@ -175,7 +175,7 @@ bool StreamPlayer::is_playing() const {
 	if (playback.is_null())
 		return false;
 
-	return playback->is_playing();
+	return playback->is_playing() || resampler.has_data();
 }
 
 void StreamPlayer::set_loop(bool p_enable) {
@@ -267,7 +267,9 @@ void StreamPlayer::seek_pos(float p_time) {
 
 	if (playback.is_null())
 		return;
-	return playback->seek_pos(p_time);
+	//works better...
+	stop();
+	playback->play(p_time);
 
 }
 

+ 5 - 0
servers/audio/audio_rb_resampler.h

@@ -67,6 +67,11 @@ public:
 		return todo;
 	}
 
+
+	_FORCE_INLINE_ bool has_data() const {
+		return rb && rb_read_pos!=rb_write_pos;
+	}
+
 	_FORCE_INLINE_ int16_t *get_write_buffer() { return read_buf; }
 	_FORCE_INLINE_ void write(uint32_t p_frames) {