나는이 아이디어의 구현을 엄격하게 찾고 있지는 않지만 누군가가 이미 그것을 만든 경우, 그것은 멋지고 나는 그것을보고 싶습니다. 그렇지 않은 경우 :더 부드럽게 안드로이드 SeekBar
Android의 파형 생성기 앱에 SeekBars
두 개를 구현하려고합니다. 나는 볼륨, 주파수, 로우 패스 필터 컷오프 주파수, 공진, 피치 벤드 등과 같은 몇 가지 컨트롤을 가지고있다.
내 SeekBars
의 문제점은 소리가 너무 발달하여 더 아날로그적인 소리를 내고 싶다는 것이다. -ish (원한다면 더 부드럽게). 앱을 iOS로 구현할 때, 네이티브 인 UISliders
은 좋은 일을했고 나는 계단 모양의 움직임을 듣지 못했습니다. 그러나 SeekBars
은 부드럽지 않고 값을 값으로 이동하는 경향이 있습니다 (최대 값 1000 인 경우 10에서 100까지와 같이 말하십시오).
부드럽게 슬라이더를 만들거나 이미있는 경우 사용자 지정 UI를 디자인하는 것이 가장 좋은 것인지 궁금합니다. 또한, 내 오디오 스레드가 SeekBar
의 기능을 방해하고 이러한 점프/단계와 유사한 동작을 일으킬 가능성이 있습니까?
것 이미 시도했다 :
로우 패스 청취자의
onProgressChanged
에서 SeekBar를 진행합니다. 이것은 실제로 작동하지 않습니다 (예를 들어 5에서 100으로 뛰었을 때,이 값은 중간에 값을 주지만, 여전히 부드럽고 부드럽게 움직이지는 않습니다). 거대한 점프 (5 ~ 100 등)가있는 경우// b = 0.99, a = 0.01 // Follows simple lowpass: yn = (xn * b) + (yn1 * a) public double lowpass(int xn) { double yn = (xn * b) + (lastProgress * a); lastProgress = yn; return yn; }
, 나는 피치 벤드을하려고 한 경우이 가진 문제가 1 씩 오디오 문맥의 변수를 증가 while 루프를 부를 것이다 (총 16384 값이되도록 14 비트 숫자), 목표 값에 도달하는 데 너무 오래 걸립니다 (피치 벤드는 쿨하게 들립니다). 예를 들어 (진행 올라가고에 대한 분명이 계정 만) :
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int myProgress = seekBar.getProgress(); while (myProgress < progress) { // This will increase the audio context's frequency variable by one every loop until we've reached our target progress audioContext.setFrequency(myProgress++); } }
감사합니다!
은'청취자의'startTrackingTouch' 통화에서 설정할 수 startTime'시겠습니까? 나는 이것을 곧 풀어 볼 것입니다 ... –
예, startTime은 변경이 일어난 순간입니다. – Mick
좋은 제안이지만 startTime에서 밀리 초 범위가 너무 작아서 (일반적으로 1 차이 만) 정확히 계산할 수 없습니다 . 어떤 아이디어? 속도 테이퍼 만 변경해야합니까? –